2010-05-04 3 views
5

ToolStripComboBox는 ToolStripButton 뒤에 배치되고 오른쪽으로 정렬 된 다른 하나에 의해 folow됩니다. 이전과 이후의 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 속성을 False로 설정하면 작동하지 않습니다.

+0

여기에 문제가 있습니다 (과거에는 V2005를 사용했을 때 기억이 안납니다). 각 홀수 중요도 (크기 차이가 픽셀 수만큼 작 으면 효과가 발생하지 않음) 크기가 감소하면 ToolStripComboBox가 사라집니다 (다시 한 번 줄이면 나타납니다. 다시 한 번 축소하면 다시 사라집니다.) 증가 시키십시오. AutoResize를 false로 설정하면 빼기 숫자가 증가합니다 (예 : 4). 도움이되지 않습니다. SplitContainer 패널 안에있는 ToolStrip은 SplitContainer 스플리터를 드래그하여 크기를 조정할 때마다 크기가 조절됩니다. – Ivan

+0

내가 설명한 문제 패턴의 가장 일반적인 경우는 최대화 된 상태에서 양식을 복원하는 것입니다.이 경우 왼쪽 패널과 오른쪽 패널에있는 ToolStripComboBoxes가 모두 사라집니다. – Ivan

+0

'UserForm'이 최대화 된 상태에서 크기가 조정 된 후에'ToolStripComboBox'가 사라지는 것을 방지하기 위해이 해킹을 사용했습니다 :'ToolStripComboBox.Visible = false; ToolStripComboBox.Visible = true;'toolStripComboBox1.Width = ...'바로 뒤에있는'toolStrip1_Resize' 이벤트 핸들러 내부에 있습니다. HTH – 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

VS2010/.NET 4 사용 : 양식의 크기를 매우 빨리 조정해도 컨트롤 문제가 계속 사라집니다. 그러나 폼의 resize 이벤트 핸들러에 toolStrip1.PerformLayout()을 추가하면 쉽게 해결할 수 있습니다. –

+0

96 dpi 이외의 dpi 설정을 사용할 때 제대로 작동하지 않는 것 같습니다. 너비를 너무 크게 설정하면 너비가 조정됩니다. – 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); 

이제 콤보 상자가 올바르게 채워집니다. 그에 따라 열 또는 행 범위를 설정하십시오.