winform笔记

2019-02-21 15:44:51 浏览数 (1)

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);
}

0 人点赞