none
botton click事件觸發combobox doubleClick事件 RRS feed

  • 問題

  • 各位您們好,請問一下,我想要在botton的click事件觸發combobox的doubleClick事件,不知道這樣的想法可行,由於它們觸發的傳入參數型別是不同的,關於我的想法,我在網路上該如何搜尋,請大大給我想法,謝謝
    2009年12月9日 上午 03:45

解答

  • Hi!

    詢問一下為什麼要 在botton的click事件觸發combobox的doubleClick事件

    是否能將 doubleClick事件內處理的程式碼寫成 function , 讓 botton.click 與 combobox.doubleClick 呼叫就好 ?
    • 已標示為解答 冰糖旋風 2009年12月9日 上午 07:50
    2009年12月9日 上午 04:02
  • 大大可是我需要由mosedoubleclick所提供出來的MouseEventArgs e的e取得的x,y位置,這樣還可以使用小歐的方法嗎,謝謝

    你的需求有矛盾, 當你用Button去觸發listview的mousedoubleclick, 你mouse的position也不會在listView上啊, 那你取得這個x,y值有何意義 ?

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已標示為解答 冰糖旋風 2009年12月9日 上午 07:50
    2009年12月9日 上午 06:12
    版主
  •         private void Form1_Load(object sender, EventArgs e)
            {
                ComboBox cb=new ComboBox();
                cb.Name = "cmbList";
                cb.DropDownStyle = ComboBoxStyle.DropDownList;
                cb.Items.Add("None");
                listView1.Controls.Add(cb);//加入ComboBox
                cb.SelectedIndex = 0;
                listView1.Items.Add(new ListViewItem("Test1"));
                listView1.Items.Add(new ListViewItem("Test2"));
            }
    
            private void listView1_DoubleClick(object sender, EventArgs e)
            {
                FillComboBox();
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
                FillComboBox();
            }
    
            private void FillComboBox()
            {
                if (listView1.SelectedIndices.Count == 0) return;//如果Listview沒有選,就不往下
                ComboBox cb = listView1.Controls.Find("cmbList", false)[0] as ComboBox; //找到你的ComboBox
                cb.BeginUpdate();
                cb.Items.Clear();
                switch (listView1.Items[listView1.SelectedIndices[0]].Text)
                {
                    case "Test1":
                        cb.Items.Add("a1");
                        cb.Items.Add("b1");
                        cb.Items.Add("c1");
                        break;
                    case "Test2":
                        cb.Items.Add("a2");
                        cb.Items.Add("b2");
                        cb.Items.Add("c2");
                        break;
                    default :
                        cb.Items.Add("None");
                        break;
                }
                cb.EndUpdate();
                cb.SelectedIndex = 0;
            }
    不知道你要的是不是這樣的效果,而小歐所講的把它拉出來當function就是這個意思.

    同Bill說的,你不應該著重在Mouse的X,Y,因為當你按下Button時,位置也移到Button上了,所以沒有意義.

    所以我用ListView的SelectedIndices來找出使用者點了那一項,但如果MultiSelect=ture時,會有多筆.

    這些都要看你的實際運用狀況,這個Sample只是大概示意.
    • 已標示為解答 冰糖旋風 2009年12月9日 上午 07:50
    2009年12月9日 上午 06:32

所有回覆

  • Hi!

    詢問一下為什麼要 在botton的click事件觸發combobox的doubleClick事件

    是否能將 doubleClick事件內處理的程式碼寫成 function , 讓 botton.click 與 combobox.doubleClick 呼叫就好 ?
    • 已標示為解答 冰糖旋風 2009年12月9日 上午 07:50
    2009年12月9日 上午 04:02
  • hi~
    通常連續處理動作,一般來說會像小歐說的方式。

    把combobox.doubleClick內需要做的事寫成方法,這樣其它事件有需要用的時候就可以直接呼叫。

    My Blog:http://www.dotblogs.com.tw/alonstar
    解決問題之後,別忘了回到論壇把正確回應標示成解答哦!
    2009年12月9日 上午 04:11
  • 大大您好,由於我在listview裡加入combobox,在我連續點選combobox時,才可以選擇其他items項目,而這些動作我想要透過一個按鈕,也就是使用者按下這個按鈕,就可以到指定的combobox裡選擇items項目,謝謝
    2009年12月9日 上午 04:38
  • HI,
    能不能提供一下畫面 or 範例。
    看不太懂你想要做什麼功能...


    My Blog:http://www.dotblogs.com.tw/alonstar
    解決問題之後,別忘了回到論壇把正確回應標示成解答哦!
    2009年12月9日 上午 05:13
  • 大大抱歉,我不會貼圖,那我描述清楚一點,就是在listview裡面加入combobox,combobox裡面有許多items項目可供選擇,若是doubleclick(c#提供的事件) listview上的某一位置,就可以看到那個位置裡combobox下拉的選項,但我想要用一個按鈕實現我剛剛所說的步驟(即前面黑體部份),您懂我的意思嗎,謝謝大大

    2009年12月9日 上午 05:28
  • 通常會採取小歐建議的作法, 當然你可以可以直接去呼叫該listview的 mousedoubleclick事件委派函式, 只要照著該委派函式所規定的參數傳遞即可
    參數 System.Object Sender, System.Windows.Forms.MouseEventArgs e
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年12月9日 上午 05:43
    版主
  • 大大可是我需要由mosedoubleclick所提供出來的MouseEventArgs e的e取得的x,y位置,這樣還可以使用小歐的方法嗎,謝謝
    2009年12月9日 上午 05:58
  • Hi,

    MousePosition也可以取得座標位置

    Control.MousePosition 屬性

    若要轉換座標
    可透過PointToClient
    Control.PointToClient 方法

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2009年12月9日 上午 06:07
  • 大大可是我需要由mosedoubleclick所提供出來的MouseEventArgs e的e取得的x,y位置,這樣還可以使用小歐的方法嗎,謝謝

    你的需求有矛盾, 當你用Button去觸發listview的mousedoubleclick, 你mouse的position也不會在listView上啊, 那你取得這個x,y值有何意義 ?

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已標示為解答 冰糖旋風 2009年12月9日 上午 07:50
    2009年12月9日 上午 06:12
    版主
  •         private void Form1_Load(object sender, EventArgs e)
            {
                ComboBox cb=new ComboBox();
                cb.Name = "cmbList";
                cb.DropDownStyle = ComboBoxStyle.DropDownList;
                cb.Items.Add("None");
                listView1.Controls.Add(cb);//加入ComboBox
                cb.SelectedIndex = 0;
                listView1.Items.Add(new ListViewItem("Test1"));
                listView1.Items.Add(new ListViewItem("Test2"));
            }
    
            private void listView1_DoubleClick(object sender, EventArgs e)
            {
                FillComboBox();
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
                FillComboBox();
            }
    
            private void FillComboBox()
            {
                if (listView1.SelectedIndices.Count == 0) return;//如果Listview沒有選,就不往下
                ComboBox cb = listView1.Controls.Find("cmbList", false)[0] as ComboBox; //找到你的ComboBox
                cb.BeginUpdate();
                cb.Items.Clear();
                switch (listView1.Items[listView1.SelectedIndices[0]].Text)
                {
                    case "Test1":
                        cb.Items.Add("a1");
                        cb.Items.Add("b1");
                        cb.Items.Add("c1");
                        break;
                    case "Test2":
                        cb.Items.Add("a2");
                        cb.Items.Add("b2");
                        cb.Items.Add("c2");
                        break;
                    default :
                        cb.Items.Add("None");
                        break;
                }
                cb.EndUpdate();
                cb.SelectedIndex = 0;
            }
    不知道你要的是不是這樣的效果,而小歐所講的把它拉出來當function就是這個意思.

    同Bill說的,你不應該著重在Mouse的X,Y,因為當你按下Button時,位置也移到Button上了,所以沒有意義.

    所以我用ListView的SelectedIndices來找出使用者點了那一項,但如果MultiSelect=ture時,會有多筆.

    這些都要看你的實際運用狀況,這個Sample只是大概示意.
    • 已標示為解答 冰糖旋風 2009年12月9日 上午 07:50
    2009年12月9日 上午 06:32
  • 各位大大謝謝
    2009年12月9日 上午 07:50