2013-09-18 2 views
0

Я знаю, что ComboBox.Height не может быть легко задан. Может быть изменен с помощью Font. Но мне нужно знать, что это конечная высота. Он не обновляется до появления окна и элементов управления.C# - Как получить фактическую высоту ComboBox

Как могу рассчитать? Когда я запускаю это кнопка не ниже, но за полем со списком:

// my forms must be disigned by code only (no designer is used) 
public class Form1: Form 
{ 
    public Form1() 
    { 
     ComboBox box = new ComboBox(); 
     box.Font = new Font("Comic Sans MS", 100, FontStyle.Regular); 
     Controls.Add(box); 

     Button button = new Button(); 
     button.Text = "hello world"; 
     button.SetBounds(box.Left, box.Bottom, 256, 32); 
     button.SetBounds(box.Left, box.Height, 256, 32); // doesn't work either 
     Controls.Add(button); 
    } 
} 
+0

Он наследует от управления, так что не так с [ 'Height'] (http://msdn.microsoft. com/en-us/library/system.windows.forms.control.height.aspx) свойство? – Sayse

+0

@Sayse Я предполагаю, что проблема с OPs - это всплывающий список ComboBox, охватывающий другие элементы управления в его форме. 'Height' вернет только высоту элемента управления TextBox. – Filburt

+0

@Sayse Он не обновляется до тех пор, пока не появится окно, а «ComboBox» будет видимым. – Bitterblue

ответ

1

Проблема заключается в том, что ComboBox.Bottom свойство не будет обновляться, чтобы компенсировать размер шрифта, пока ComboBox не было обращено.

Решение динамически добавлять элементы управления в Form.Load случае вместо конструктора:

private void MainForm_Load(object sender, EventArgs e) 
{ 
    ComboBox box = new ComboBox(); 
    box.Font = new Font("Comic Sans MS", 100, FontStyle.Regular); 
    Controls.Add(box); 

    Button button = new Button(); 
    button.Text = "hello world"; 
    button.SetBounds(box.Left, box.Bottom, 256, 32); 
    Controls.Add(button); 
} 
+0

Да, это помогает. Благодаря! Также также работает событие 'Resize'' ComboBox'. – Bitterblue

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