2010-05-20 63 views
3

我有這樣的代碼,調整組合框的下拉的寬度:在C#中調整組合框下拉寬

private void comboBox_DropDown(object sender, EventArgs e) 
    { 
    ComboBox senderComboBox = (ComboBox)sender; 
    int width = senderComboBox.DropDownWidth; 
    Graphics g = senderComboBox.CreateGraphics(); 
    Font font = senderComboBox.Font; 
    int vertScrollBarWidth = 
     (senderComboBox.Items.Count > senderComboBox.MaxDropDownItems) 
     ? SystemInformation.VerticalScrollBarWidth : 0; 
    int newWidth; 

    foreach (string s in ((ComboBox)sender).Items) 
    { 
     newWidth = (int)g.MeasureString(s, font).Width 
      + vertScrollBarWidth; 

     if (width < newWidth) 
     { 
      width = newWidth; 
     } 
    } 

    senderComboBox.DropDownWidth = width; 
    } 

它的偉大工程,除了它擴展了下拉到右側的寬度,而我寧願它擴展到左邊,因爲組合框位於我的表單的右側。任何想法或建議,你可能會感激。謝謝。

+0

「.anchor」屬性沒有處理這個問題嗎? – Pretzel 2010-05-20 20:51:50

+0

@Pretzel:據我所知,當表單被調整大小時,Anchor隻影響控件的大小。 – 2010-05-20 20:55:56

回答

0

經過大量搜索,似乎這實際上是微軟尚未解決的問題(令人驚訝)。我決定重新安排我的佈局,以便更好地適應這種功能 - 缺乏時間,但現在,我只是想與之共存。謝謝各位的意見。

+0

我的解決方案不適合你嗎?這是我會承認的「hack-ish」,但根據我的經驗,這完全可行,沒有奇怪的副作用。 – Pretzel 2010-05-24 15:44:03

+0

嗨椒鹽脆餅。很不幸的是,不行。在使用中移動控件對於此應用程序並不是真正的可行選項。我已經重新安排了佈局,以配合微軟在其組合框中設置的限制功能。還是)感謝你的建議。 – 2010-05-25 12:58:50

3

好吧,所以.Anchor沒有像我期望的那樣工作,所以這裏有一個全新的答案,它可以工作,但我覺得它有點破解,(但也許這是一種完全合理的方式來管理它) :

int x = 10;   
comboBox1.Location = new Point(comboBox1.Location.X - x, comboBox1.Location.Y); 
comboBox1.Width += x; 

此代碼將其沿x軸拉回10個像素,然後將ComboBox1展開10個像素。

這對我來說工作很順利。這對你有用嗎?

+0

+1哈哈這很聰明。 – Mike 2010-05-20 21:14:14

+0

我不確定我會用「聰明」這個詞,但是謝謝...... :-)不知何故,我仍然覺得應該有一種更優雅的方式來做到這一點。 *聳聳肩*我想這是你的WinForms,對吧? – Pretzel 2010-05-20 21:16:19

2

我在CodeProject上寫了一篇文章,介紹如何破解組合框以使其滾動條水平滾動。看到這裏的article

+0

+1 - 哇。這很漂亮,男人。我不確定這是OP所需要的,但是你可以從我這裏得到讚揚,因爲這可能是他的問題的更好解決方案。 – Pretzel 2010-05-20 21:23:43

+0

@Pretzel:謝謝! :) – t0mm13b 2010-05-20 21:32:02

+0

事實上,我喜歡這個線程,所以我可以回來看看你的代碼更密切以後。我可以看到在另一個項目中使用它...... :) – Pretzel 2010-05-20 21:37:08

0

你可能想看看把控件放在容器中。例如,創建FlowLirection屬性爲RightToLeft的FlowLayoutPanel。將組合框放在新面板中。此方法的一個好處是您可以通過任何方式更改尺寸,並且控件/容器將按預期行事。

+0

謝謝,bleh,但我嘗試設置RightToLeft屬性,但它沒有給我我想要的結果。 – 2010-05-21 20:57:16