2010-05-04 14 views
5

टूलस्ट्रिपकंबोबॉक्स को टूलस्ट्रिप बटन के बाद रखा गया है और इसे दूसरे द्वारा फोल्ड किया गया है, जो सही-गठबंधन है। मैं preStinging और folowing ToolStripButtons के बीच उपलब्ध सभी जगहों को भरने के लिए हमेशा अपनी लंबाई समायोजित करने के लिए ToolStripComboBox को कैसे सेट अप करूं?ToolStrip पर उपलब्ध सभी जगहों को भरने के लिए ToolStripComboBox कैसे बनाएं?

अतीत में मैं अभिभावक आकार बदलने की घटना को संभालने के लिए उपयोग करता था, पड़ोसी तत्वों के समन्वय के आधार पर सेट करने के लिए नई लंबाई की गणना करता था और नए आकार को सेट करता था। लेकिन अब, जैसा कि मैं एक नया एप्लीकेशन विकसित कर रहा हूं, मुझे आश्चर्य है कि कोई बेहतर तरीका नहीं है।

उत्तर

1

इसके लिए कोई स्वचालित लेआउट विकल्प नहीं है। लेकिन आप ToolStrip.Resize ईवेंट को लागू करके आसानी से ऐसा कर सकते हैं। यह अच्छी तरह से काम:

private void toolStrip1_Resize(object sender, EventArgs e) { 
     toolStripComboBox1.Width = toolStripComboBox2.Bounds.Left - toolStripButton1.Bounds.Right - 4; 
    } 
    protected override void OnLoad(EventArgs e) { 
     toolStrip1_Resize(this, e); 
    } 

गलत पर TSCB के autoresize गुण सेट करना सुनिश्चित करें अन्यथा यह काम नहीं करेगा।

+0

यहां एक समस्या है (मुझे याद नहीं है कि मेरे पास पिछले समय था, जब मैं V2005 का उपयोग कर रहा था)। प्रत्येक विषम महत्वपूर्ण पर (प्रभाव तब नहीं होता है जब आकार का अंतर कुछ पिक्सल या उससे कम के रूप में छोटा हो) आकार कम हो जाता है टूलस्ट्रिपकंबोबाक्स गायब हो जाता है (ऐसा लगता है कि अगर मैं इसे एक बार फिर कम करता हूं (और यदि मैं इसे एक बार फिर कम करता हूं तो गायब हो जाएगा) या इसे बढ़ाएं)। ऑटोराइज को झूठ पर सेट किया गया है, एक अंक को घटाया जा सकता है (जो आपके उदाहरण में 4 है) मदद नहीं करता है। स्प्लिटकॉन्टेनर पैनल के अंदर स्थित टूलस्ट्रिप और स्प्लिटकॉन्टेनर स्प्लिटर खींचकर प्रत्येक बार एक मैनेल का आकार बदलकर आकार बदलता है। – Ivan

+0

मैंने जो समस्या पैटर्न का वर्णन किया है, उसका सबसे आम घटना मामला अधिकतम राज्य से एक फॉर्म को पुनर्स्थापित कर रहा है - टूलस्ट्रिपकंबोबॉक्स (बाएं पैनल में और दाएं पैनल में) दोनों इस मामले में गायब हो जाते हैं। – Ivan

+0

'टूलस्ट्रिपकंबोबॉक्स' को 'उपयोगकर्ता फॉर्म' के बाद अधिकतम राज्य से आकार बदलने के बाद 'गायब होने से रोकने के लिए' मैंने इस हैक का उपयोग किया: 'ToolStripComboBox.Visible = false; ToolStripComboBox.Visible = true; 'toolStripComboBox1.Width = ...' 'के बाद 'toolStrip1_Resize' ईवेंट हैंडलर के अंदर'। एचटीएच – dee

5

मैं बड़ी सफलता के साथ निम्नलिखित का उपयोग करें:

private void toolStrip1_Layout(System.Object sender, System.Windows.Forms.LayoutEventArgs e) 
{ 
    int width = toolStrip1.DisplayRectangle.Width; 

    foreach (ToolStripItem tsi in toolStrip1.Items) { 
     if (!(tsi == toolStripComboBox1)) { 
      width -= tsi.Width; 
      width -= tsi.Margin.Horizontal; 
     } 
    } 

    toolStripComboBox1.Width = Math.Max(0, width - toolStripComboBox1.Margin.Horizontal); 
} 

ऊपर कोड disapearing नियंत्रण समस्या से ग्रस्त नहीं है।

+2

वीएस -2010/.NET 4 का उपयोग करना: यदि मैं फॉर्म को बहुत तेज़ी से बदलता हूं तो मुझे अभी भी गायब नियंत्रण समस्या मिलती है। लेकिन यह फ़ॉर्म के आकार बदलने वाले ईवेंट हैंडलर में toolStrip1.PerformLayout() जोड़कर आसानी से हल किया जाता है। –

+0

यह 96 डीपीआई के अलावा डीपीआई सेटिंग का उपयोग करते समय ठीक से काम नहीं करता है। इसे बहुत बड़ा बनाने के बाद चौड़ाई को स्केल किया जाएगा। – kjbartel

1
ToolStrip ts = new ToolStrip(); 

ToolStripComboBox comboBox = new TooLStripComboBox(); 
comboBox.Dock = DockStyle.Fill; 

ts.LayoutStyle = ToolStripLayoutStyle.Table; 
((TableLayoutSettings)ts.LayoutSettings).ColumnCount = 1; 
((TableLayoutSettings)ts.LayoutSettings).RowCount = 1; 
((TableLayoutSettings)ts.LayoutSettings).SetColumnSpan(comboBox,1); 

ts.Items.Add(comboBox); 

अब combobox सही ढंग से भरने डॉक करेगा। तदनुसार कॉलम या पंक्ति अवधि सेट करें।