none
失去焦点问题 RRS feed

  • 問題

  • 在窗体中假如有多个控件,其中有一combobox控件,只要combobox失去焦点(鼠标点击任何位置),就改变combobox样式?
    2009年12月23日 上午 06:02

解答

    • 已標示為解答 jickpj 2009年12月24日 上午 09:00
    2009年12月23日 上午 06:06
  • Control.Leave 事件

    Leave事件也可以吧,參考以上...

    • 已標示為解答 jickpj 2009年12月24日 上午 09:00
    2009年12月23日 上午 06:12
  •         private void Form1_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.X < this.comboBox1.Left || e.X > this.comboBox1.Left + this.comboBox1.Width || e.Y< this.comboBox1.Top 
                    || e.Y > this.comboBox1.Top + this.comboBox1.Height )
                {
                    this.comboBox1.DropDownStyle = ComboBoxStyle.Simple;
                }
            }


    因為ComboBox沒失去焦點,比如說選到Form或Label等控制項,您可以用Timer等方式,檢查滑鼠是否點到以外的地方,參考以上...
    • 已標示為解答 jickpj 2009年12月24日 上午 09:01
    2009年12月23日 上午 08:16
  • 我測試的結果是會改變. 你一定有哪裡搞錯.
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void comboBox1_Leave(object sender, EventArgs e)
            {
                comboBox1.DropDownStyle = ComboBoxStyle.Simple;
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                comboBox1.DropDownStyle = ComboBoxStyle.DropDown;
            }

            private void button1_Click(object sender, EventArgs e)
            {
                comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
            }
        }
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已標示為解答 jickpj 2009年12月24日 上午 09:01
    2009年12月23日 上午 08:19
    版主
  • 1. 上述的碼只是為了測試事實上重點是
           private void comboBox1_Leave(object sender, EventArgs e)
            {
                comboBox1.DropDownStyle = ComboBoxStyle.Simple;
            }

    所以沒有什麼一百個控制項要寫1百次的問題

    2. Form 本身是無法接收焦點的. 還有什麼叫做其它控件

    3. 你的發問沒頭沒尾的, 誰知道你指的其它控件是什麼東西 ?

    4. 這裡是講求禮貌的論壇, 請注意你發問的語氣!
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已標示為解答 jickpj 2009年12月24日 上午 09:02
    2009年12月24日 上午 02:28
    版主

所有回覆

    • 已標示為解答 jickpj 2009年12月24日 上午 09:00
    2009年12月23日 上午 06:06
  • Control.Leave 事件

    Leave事件也可以吧,參考以上...

    • 已標示為解答 jickpj 2009年12月24日 上午 09:00
    2009年12月23日 上午 06:12
  • 不行!

    2009年12月23日 上午 07:00
  • 是怎麼不行 ? 總要有點程式碼來看吧 ?

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年12月23日 上午 07:15
    版主
  • 在Leave事件里写上
      this.cmbType2.DropDownStyle = ComboBoxStyle.Simple;
    当我鼠标点击窗体任何位置时不触发这个事件。

    2009年12月23日 上午 07:27
  • 不行??什麼原因
    通通拿去做雞精了嗎??

    貼出您寫哪些語法在哪個事件吧!!

    不然就真的拿去做雞精
    ^_^a


    topcat(姍舞之間的極度凝聚)http://www.dotblogs.com.tw/topcat/
    2009年12月23日 上午 07:29
  • 上面有啊!leave事件里。
    2009年12月23日 上午 07:32
  •         private void Form1_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.X < this.comboBox1.Left || e.X > this.comboBox1.Left + this.comboBox1.Width || e.Y< this.comboBox1.Top 
                    || e.Y > this.comboBox1.Top + this.comboBox1.Height )
                {
                    this.comboBox1.DropDownStyle = ComboBoxStyle.Simple;
                }
            }


    因為ComboBox沒失去焦點,比如說選到Form或Label等控制項,您可以用Timer等方式,檢查滑鼠是否點到以外的地方,參考以上...
    • 已標示為解答 jickpj 2009年12月24日 上午 09:01
    2009年12月23日 上午 08:16
  • 我測試的結果是會改變. 你一定有哪裡搞錯.
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void comboBox1_Leave(object sender, EventArgs e)
            {
                comboBox1.DropDownStyle = ComboBoxStyle.Simple;
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                comboBox1.DropDownStyle = ComboBoxStyle.DropDown;
            }

            private void button1_Click(object sender, EventArgs e)
            {
                comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
            }
        }
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已標示為解答 jickpj 2009年12月24日 上午 09:01
    2009年12月23日 上午 08:19
    版主
  • 那我有窗体上有100个控件不写100下!
    2009年12月23日 上午 11:05
  • 你这样只能解决点击窗体与面板控件,但我点击其它控件不行!
    点击窗体任何位置(包括窗体上的除combobox控件以外的控件)
    2009年12月23日 上午 11:09
  • 1. 上述的碼只是為了測試事實上重點是
           private void comboBox1_Leave(object sender, EventArgs e)
            {
                comboBox1.DropDownStyle = ComboBoxStyle.Simple;
            }

    所以沒有什麼一百個控制項要寫1百次的問題

    2. Form 本身是無法接收焦點的. 還有什麼叫做其它控件

    3. 你的發問沒頭沒尾的, 誰知道你指的其它控件是什麼東西 ?

    4. 這裡是講求禮貌的論壇, 請注意你發問的語氣!
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已標示為解答 jickpj 2009年12月24日 上午 09:02
    2009年12月24日 上午 02:28
    版主