C# 里面的 #region 是什么意思?
#region是c#预处理器指令。
#region是一个分块预处理命令,它主要用于编辑代码的分段,在编译时会被自动删除。
#region使你可以在使用VS代码编辑器的大纲显示功能时指定可展开或折叠的代码块。
例如:
#region MyClass definition
public class MyClass
{
static void Main()
{
}
}
#endregion
备注:#region块必须以#endregion指令终止。
#region块不能与#if块重叠。但是,可以将#region块嵌套在#if块内,或将#if块嵌套在#region块内。
时间操作
计算2个日期之间的天数差
DateTime dt1 = Convert.ToDateTime("2007-8-1");
DateTime dt2 = Convert.ToDateTime("2007-8-15");
TimeSpan span = dt2.Subtract(dt1);
int dayDiff = span.Days ;
计算某年某月的天数
int days = DateTime.DaysInMonth(2009, 8);
days = 31;
给日期增加一天、减少一天
DateTime dt =DateTime.Now;
dt.AddDays(1); //增加一天 dt本身并不改变
dt.AddDays(-1);//减少一天 dt本身并不改变
c#中 int,string之间相互转换
1. 简单方法:int转String:ToString();int转string:int.Parse()
复杂方法:int转String:System.Convert.ToString();int转string:System.Convert.ToIntXX()
2. int32.parse(xxxxxx); xx.toString();
3. string到int: Int.Parse(); Convert.Toint();
int到string: ToString();
还有一些好像是vc的,如下:
1. 以string转int为例: 使用 Integer.valueOf(string) 方法
其余类型类推.
2. Integer.parseInt(String s)
Byte.parseByte(String s)
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]="女侠程佩君";
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;
动态的控制控件显示的层次
btnSearch.SendToBack();置于低层
btnSearch.BringToFront(); 置于顶层
CheckBox 是否被选中:
if(AutoUpdate.Checked == false){
MessageBox.Show("CheckBox未被选中", "系统提示");
}
winform 设置控件坐标位置
label1.Location = new System.Drawing.Point(200, 200);
winform 判断click事件点击的是左键还是右键,click和MouseDown委托
- button.Click += new System.EventHandler(btn_Click);
- private void btn_Click(object sender, EventArgs e)
- {
- //EventArgs继承自MouseEventArgs,所以可以强转
- MouseEventArgs Mouse_e = (MouseEventArgs)e;
- //点鼠标右键,return
- if (Mouse_e.Button == MouseButtons.Right)
- {
- MessageBox.Show("右键!");
- }
- }
只有把EventArgs强制转换成MouseEventArgs就可以有相当于MouseDown事件的功能了
C#代码
- button2.MouseDown += new MouseEventHandler(btn2_MouseDown);
- private void btn2_MouseDown(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Right)
- {
- MessageBox.Show("右键");
- }
- }
winform 判断文件夹是否存在,新建文件夹,判断文件夹存不存在
方法1:
- if (Directory.Exists("d:\\pic"))
- {
- MessageBox.Show("存在");
- }
- else
- {
- MessageBox.Show("不存在");
- }
方法2:
- DirectoryInfo TheFolder = new DirectoryInfo("d:\\pic");
- if (TheFolder.Exists)
- {
- MessageBox.Show("进来了");
- }
- else
- {
- MessageBox.Show("没进来");
- }
@"d:\pic"
也就是说转义符可以用@来代替
新建文件夹:
- if (!Directory.Exists(@txtFileSaveDir.Text))//若文件夹不存在则新建文件夹
- {
- Directory.CreateDirectory(@txtFileSaveDir.Text); //新建文件夹
- }
dagaGridView相关操作
(1)winfrom 把dagaGridView里的数据清空,清除dagaGridView里的值
C#代码
- this.dataGridView1.Rows.Clear(); //清空dataGridView1里的显示
(2) 选中dataGridView一条记录,把值赋给comboBox显示出来
下边这个是comboBox中已存在记录的情况
- //设置 comboBox3 为当前选中的 号牌种类
- for (int i = 0; i < comboBox3.Items.Count; i++)
- {
- comboBox3.SelectedIndex = i;
- string comboBoxText1 = comboBox3.Text.Substring(comboBox3.Text.LastIndexOf(":") + 1);
- if (hpzlCO3.Equals(comboBoxText1))
- {
- return;
- }
- else
- {
- comboBox3.SelectedIndex = -1;
- }
- }
下边这个是comboBox中不存在记录的情况
- #region 第二个dataGridView 鼠标单击 选中
- int count = 0;
- //设置comboBox1为当前dataGridView2的选中的hpzl的值
- private void dataGridView2_RowEnter(object sender, DataGridViewCellEventArgs e)
- {
- int rowIndex = e.RowIndex; //获取当前行
- //MessageBox.Show(rowIndex.ToString());
- string hphm = dataGridView2.Rows[rowIndex].Cells["hphm"].Value.ToString(); //获取当前行 hphm 字段的值
- string hpzl = dataGridView2.Rows[rowIndex].Cells["hpzl"].Value.ToString(); //获取当前行 hpzh 字段的值
- string s = dataGridView2.Rows[rowIndex].Cells["id"].Value.ToString(); //获取当前行 xh 字段的值
- this.textBox2.Text = hphm;
- this.textBox3.Text = hphm;
- int count = 0;
- if (comboBox1.Items.Count == 0)//第一次进入窗体没值的时候,添加一个值到comboBox1里
- {
- this.comboBox1.Items.Add(hpzl);
- }
- else
- {
- //设置 comboBox1 为当前选中的 hpzl
- for (int i = 0; i < comboBox1.Items.Count; i++)//设置循环comboBox1中所有数据
- {
- comboBox1.SelectedIndex = i;//设置comboBox1的索引
- string comboBoxText1 = comboBox1.Text;//获取comboBox1当前索引值
- if (hpzl.Equals(comboBoxText1))//hpzl为当前选中的dataGridView2的 hpzl的值
- {
- count++;//如果进到这个if体,说明comboBox1中已存在当前选中的hpzl的值
- return;//跳出
- }
- else
- {
- comboBox1.SelectedIndex = -1;//否则设置为当全索引不变
- }
- }
- if (count == 0)//count为0,说明当前选中的dataGridView2的hpzl中的值在comboBox1不存在
- {
- this.comboBox1.Items.Add(hpzl);//添加一个comboBox1中不存在的值
- comboBox1.SelectedIndex = comboBox1.Items.Count - 1;//设置comboBox1的索引为最后添加的那个
- }
- }
- this.textBox4.Text = s;
- }
- #endregion
-
- //不显示出dataGridView1的最后一行空白
- dataGridView1.AllowUserToAddRows = false;
(4)winform DataGridView双击某一行的事件,双击表头或列头不允许有操作
- private void dataGridView1_[color=red]CellDoubleClick[/color](object sender, DataGridViewCellEventArgs e)
- {
- if ([color=red]e.RowIndex > -1 && e.ColumnIndex > -1[/color])//双击表头或列头时不起作用
- {
- MessageBox.Show("ok");
- }
- }
设置DataGridView的属性SelectionMode为FullRowSelect
这样就使DataGridView不是选择一个字段,而是选择一整行了
设置DataGridView的属性MultiSelect为false
这样就使DataGridView不能够选择多行,只能选择一行了
(6)winfrom DataGridView使行高不可改变,使列头高度不可改变
C#代码
- // 禁止用户改变DataGridView1的所有列的列宽
- //DataGridView1.AllowUserToResizeColumns = false;
- //禁止用户改变DataGridView1の所有行的行高
- dataGridView1.AllowUserToResizeRows = false;
- // 禁止用户改变列头的高度
- dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
(7)修改单元格的值
dataGridView1(列名/列索引,行索引).value(值);
show和showDialog的区别
面对多窗口的调用的时候,我们往往不喜欢窗口之间的随意切换,那样我们还要花费时间寻找我们要用的窗口,而且,一但出现问题,窗口的顺序也有可能被再次打乱,很是不顺手,那么我们怎么办呢?
我们可以将show方法转化为showdialog方法,顾名思义,showdialog是一个进行路经绑定的show方法,他是不可以自由切换的,换言之,就是,当你没有关闭你当前页的前提下,你是无法关闭该页面后面的任一页面的,它是当前唯一(路经打开)为true的。
而show方法由于未进行绑定,它所显示的各个窗口、对话框是可以相互切换,而不需要关闭当前窗口、对话框。但是他由于未进行绑定,所以每个由show方法打开的窗口的顺序是非固定的,如果遇到什么问题,由show方法打开的窗口的顺序可能会有很大的改变!
获取按键值,判断按键值
- private void pictureBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
- {
- MessageBox.Show("按下了按键,if外");
- MessageBox.Show(e.KeyValue);
- if (e.KeyValue == 32)//按下了空格进入
- {
- MessageBox.Show("按下了空格,if内");
- }
- }
使comboBox下拉列表不可编辑
设置comboBox的DropDownStyle属性为DropDownList,即可
- comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
弹出确认后删除
- if (MessageBox.Show("确认删除?", "此删除不可恢复", MessageBoxButtons.YesNo) == DialogResult.Yes)
- {
- //删除操作
- }
确定指定对象是否是 Array 对象中的元素
ArrayList al = new ArrayList();
al.Add("xxx");
al.Add("yyy");
if (al.Contains("xxx"))
{
MessageBox.Show("!", "弹出来了", MessageBoxButtons.OKCancel);
}
ComboBox绑定ArrayList数据
ArrayList list = new ArrayList(); //创建这个List是为了ComboBox绑定数据使用。
Hashtable hash = new Hashtable();//数据源哈希表
hash.Add("1", "1");
hash.Add("2", "2");
//通过这一步,就可以使用hash表间接的作为数据源使用
foreach (System.Collections.DictionaryEntry entry in hash)
{
list.Add(entry);
}
combox.DataSource = list;
combox.DisplayMember = "Value";
combox.ValueMember = "Key";
list.add(new System.Collections.DictionaryEntry("key","value"));
暂停控制台应用程序执行
垃圾回收
垃圾回收可以分为Dispose和Finalize两类,关于这两者的区别已经太多了,一个是正常的垃圾回收GC所调用的方法,另外一个是终结器Finalizer,所调用的方法,在Effective C#一书中,有着明确的建议是说使用IDispose接口来代替Finalize。原因是因为Finalize终结会增加垃圾回收对象的代数,从而影响垃圾回收。