2014-02-10 3 views
1

Я хочу показать ToolStripDropDown в виде ComboBox s выпадающее меню показано (или, например, DateTimePicker s выпадающее меню). Так что я написал этот код в моем Form:Show ToolStripDropDown правильно

private readonly ToolStripDropDown _toolStripDropDown = new ToolStripDropDown 
{ 
    TopLevel = false, 
    CanOverflow = true, 
    AutoClose = true, 
    DropShadowEnabled = true 
}; 

public Form1() 
{ 
    InitializeComponent(); 
    var label = new Label{Text = "Ups"}; 
    var host = new ToolStripControlHost(label) 
    { 
     Margin = Padding.Empty, 
     Padding = Padding.Empty, 
     AutoSize = false, 
     Size = label.Size 
    }; 

    _toolStripDropDown.Size = label.Size; 
    _toolStripDropDown.Items.Add(host); 
    Controls.Add(_toolStripDropDown); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    _toolStripDropDown.Show(button1.Left, button1.Top + button1.Height); 
} 

Когда я нажимаю на кнопку мой ToolStripDropDown отображается, но нет ни тени, ни переполнения, ни AutoClose. Что я делаю не так?

Label в ToolStripControlHost для простоты. Я использую WinForms и .NET 4.

Update:
issue image

Как вы можете увидеть выпадающий «Упс» не переполнить окно, не имеет тени (ComboBox сек выпадающий имеет и другое) и даже когда я нажал на ComboBox выпадающее меню «Ups» все еще видно.

+1

Ваш вопрос несколько неясно. Можете ли вы подробнее рассказать о том, что вы имеете в виду: 'но нет тени, нет переполнения, нет аутоклиза. Что я делаю неправильно? »Обновите вопрос, если потребуется. –

+0

Благодарим за сообщение. Я обновил свой вопрос и надеюсь, что теперь это более понятно. – Artholl

ответ

4

Вы воспитываете свой контроль в форме, которая ограничивает ее до этого родителя.

Снимите TopLevel обозначение, снимите родительство, вычислить положение в координатах экрана, и, наконец, показать меню:

private readonly ToolStripDropDown _toolStripDropDown = new ToolStripDropDown 
    { 
     //TopLevel = false, 
     CanOverflow = true, 
     AutoClose = true, 
     DropShadowEnabled = true 
    }; 

    public Form4() 
    { 
     InitializeComponent(); 

     var label = new Label { Text = "Ups" }; 
     var host = new ToolStripControlHost(label) 
     { 
      Margin = Padding.Empty, 
      Padding = Padding.Empty, 
      AutoSize = false, 
      Size = label.Size 
     }; 

     _toolStripDropDown.Size = label.Size; 
     _toolStripDropDown.Items.Add(host); 
     //Controls.Add(_toolStripDropDown); 
    } 

    private void button1_Click(Object sender, EventArgs e) 
    { 
     Point pt = this.PointToScreen(button1.Location); 
     pt.Offset(0, button1.Height); 
     _toolStripDropDown.Show(pt); 

    } 
+0

Действительно благодарю вас. Я не понимал этого ограничения. Прекрасно работает. – Artholl

 Смежные вопросы

  • Нет связанных вопросов^_^