1.combobox 数据绑定
代码语言:javascript复制comboBox.DisplayMember = "需要读取的列1(name)"; //显示到comboBox的值
comboBox.ValueMember = "需要读取的列2(id)"; //comboBox真正的值
comboBox.DataSource = ds.Tables["虚拟列名"];//绑定数据源
2.FlowLayoutPanel支持鼠标滚轮滚动
FlowLayoutPanel控件不直接支持MouseWheel事件.即滚动滚轮也不会响应.所以必须手动来支持响应滚轮. FlowLayoutPanel控件继承于Panel控件,Panel控件也是直接不支持MouseWheel事件 你可以添加MouseWheel事件,然后写上支持滚动的功能.也可以直接重写该控件.这样可以复用该控件. 如果只支持MouseWheel事件,还是不一定在滚动滚轮的时候,就能引发MouseWheel事件.所以,必须让鼠标停留在控件上时,让控件处于输入焦点状态.这是,滚动滚轮就可以引发MouseWheel事件了.
代码语言:javascript复制 //添加两个事件
autoLayout.Click = AutoLayout_Click;
autoLayout.MouseWheel = AutoLayout_MouseWheel;
private void AutoLayout_Click(object sender, EventArgs e)
{
// 在点击事件中获取焦点
autoLayout.Focus();
}
private void AutoLayout_MouseWheel(object sender, MouseEventArgs e)
{
if (e.Delta < 0)
{
if (this.VerticalScroll.Maximum > this.VerticalScroll.Value 50)
this.VerticalScroll.Value = 50;
else
this.VerticalScroll.Value = this.VerticalScroll.Maximum;
}
else
{
if (this.VerticalScroll.Value > 50)
this.VerticalScroll.Value -= 50;
else
{
this.VerticalScroll.Value = 0;
}
}
}
3.ListViewItem和ListViewSubItem关系
代码语言:javascript复制 item.Text = i.TITLE;
item.SubItems.Add(i.CONTENT);
item.SubItems.Add(i.ID);
// SubItems[0]=item.Text,取数据的时候要注意
// content就是SubItems[1]
4.如何移除自身
控件的Parent方法可以拿到父控件
代码语言:javascript复制 private void Button_Click(object sender, EventArgs e)
{
Button button = (Button)sender;
button.Parent.Controls.Remove(button);
}
5.ListView的选中问题
代码语言:javascript复制 //在此处设断点,发现点击不同的Item后,此事件居然执行了2次
//第一次是取消当前Item选中状态,导致整个ListView的SelectedIndices变为0
//第二次才将新选中的Item设置为选中状态,SelectedIndices变为1
//如果不加listview.SelectedIndices.Count>0判断,将导致获取listview.Items[]索引超界的异常
if (DataListView.SelectedIndices != null && DataListView.SelectedIndices.Count > 0)
{
ListView.SelectedIndexCollection c = DataListView.SelectedIndices;
DataListView.Items[c[0]]或者DataListView.SelectedItems[0]
// do sonmething
}
6.comboBox__SelectedIndexChanged多次触发
参考下文 http://blog.csdn.net/ruiqi317/article/details/6857542
7.DataGridView清空数据
代码语言:javascript复制DataTable dt = (DataTable)dataGridView1.DataSource;
dt.Rows.Clear();
dataGridView1.DataSource = dt;
8.弹出自定义对话框,并传值
(1)自己实现获取数据的方法 在dialog中定义获取数据的方法
代码语言:javascript复制public String getValue(){
return "aaa";
}
然后在调用dialog的主程序中如下调用
代码语言:javascript复制Dialog dlg = new Dialog();
DialogResult dr = dlg.ShowDialog();
string value = dlg.getValue();
这肯定会令人产生疑问,因为对话框Form已经关闭了,怎么还能调用其函数??? 其实,当窗体通过ShowDialog方法显示,并通过Close()函数进行关闭时,窗体资源不被释放。.可以参看MSDN: http://msdn.microsoft.com/zh-cn/library/system.windows.forms.form.close.aspx
这样,主程序就获取了用户在自定义对话框的DialogResult值,以及用户的输入。
(2)解封装 主窗体定义一个类存放数据,这里仅用一个string代替 然后在dialog如下代码
代码语言:javascript复制this.DialogResult = DialogResult.OK;
Main mainForm = (Main)this.Owner; //核心代码,将传递者解封装。
mainForm.str= ""; //核心代码
然后主窗体
代码语言:javascript复制private String str;
......
DialogResult dialog_result = dialog.ShowDialog(this);//注意,这里的this是必须的。第一种方法this参数不是必须
if (dialog_result == DialogResult.OK)
{
MessageBox.Show(str);
}