技术/艺术学习实践笔记
ASPX 标签<% C#代码 %>可以在网页渲染时执行代码。<% for(int i=0; i<5; i+=1) { %> <% Response.Write("<br>" + i) %> <% } %><%= C#代码 %>等同于调用Response.Write(...)。public string GetDate() { return DateTime.Now.ToString("yyyy-MM-dd"); }Today is <%= GetDate() %>
DataGridView使用错误容器时的巨坑使用 List 作为 DataSource。点击单元格时,就算没有单元格点击事件,也会在外层(父窗体 ShowDialog 子窗体的位置)报 IndexOutOfRange 下标越界异常。解决方法:只要是用于 DGV 显示的列表,一律用BindingList。BindingList用ResetBinding()(对于整个列表)或ResetItem(i)(对于特定元素)来手动触发“列表已改变”事件。用RaiseListChangedEvents属性控制 BindingList 是否会发出“列表已改变”的事件。注意:这个属性不仅控制添加和删除元素时是否会自动触发事件,同时也控制ResetBinding() / ResetItem(i)这类手动触发事件的方法是否会触发事件。添加向列表大量元素时的标准流程:list.RaiseListChangedEvents = false; list.Clear(); foreach(var item in source) { list.Add(item); } // 一定要先启用事件,然后再手动触发
屏幕旋转检测屏幕方向:int orientation = getResources().getConfiguration().orientation; boolean landscape = (orientation == Configuration.ORIENTATION_LANDSCAPE);强制Activity横屏AndroidManifest里给Activity标签添加属性:android:screenOrientation="landscape"切换时自动重建创建layout时在Qualifier列表中添加Orientation属性。调用R.layout.xxx时会自动根据屏幕方向选择对应的layout。
原文:https://learn.microsoft.com/en-us/archive/msdn-magazine/2012/december/csharp-the-csharp-memory-model-in-theory-and-practice半内存屏障例如有这样的程序,Init()和Print()在不同的线程上执行。int data = 0; bool inited = false; // 指示data字段是否已经设置的标志 void Init(){ data = 42; inited = true; // 设置标志,指示data字段已经设置好了 } void Print(){ // 如果有inited的标志,打印data字段的值 // 否则打印 Not initialized! if(inited){ Console.WriteLine(data); }else{ Console.WriteLine("Not initialized!"); } }
糖萌芦