2013-03-19 6 views
4

Я довольно новичок в программировании на C#, исходя из VB6, поэтому, пожалуйста, будьте осторожны: PЯ использую событие Paint для управления позициями во время выполнения?

Я использую панели для группировки элементов управления (например, панели содержат текстовое поле, ярлыки, список и т. Д.), А затем выравнивание панели во время выполнения, чтобы элементы управления выровнялись в разных разрешениях. Тем не менее, я делаю это от обычной краски Группы

т.е .:

private void pnlTop_Paint(object sender, PaintEventArgs e) 
    { 
     btnExit.Location    = new Point(this.Width - (this.Left + lblTitleMain.Left + btnExit.Width), 10); 
     btnMinimize.Location   = new Point(this.Width - (this.Left + lblTitleMain.Left + (btnExit.Width * 2)), 10); 
     btnSettings.Location   = new Point(this.Width - (this.Left + lblTitleMain.Left + (btnExit.Width * 2 + btnExit.Width)), 10); 

     lblTitleMain.Left    = (((this.ClientSize.Width - lblTitleMain.Width)/2)/2)/2; 
     lblTitleMain.Top    = btnExit.Top + lblTitleMain.Height; 

     int intMenuY     = lblTitleMain.Bottom + 5; 
     lnkMenuSystem.Location   = new Point(lblTitleMain.Left + 3, intMenuY); 
     lnkMenuDeployment.Location  = new Point(lnkMenuSystem.Right + 50, intMenuY); 
     lnkMenuTables.Location   = new Point(lnkMenuDeployment.Right + 50, intMenuY); 
     lnkMenuTCP.Location    = new Point(lnkMenuTables.Right + 50, intMenuY); 
     lnkMenuDCM.Location    = new Point(lnkMenuTCP.Right + 50, intMenuY); 
     lnkMenuProcessData.Location  = new Point(lnkMenuDCM.Right + 50, intMenuY); 
     lnkMenuGenerateReports.Location = new Point(lnkMenuProcessData.Right + 50, intMenuY); 

     lineMenuButtom.StartPoint  = new Point((((this.ClientSize.Width - lblTitleMain.Width)/2)/2)/2, lnkMenuSystem.Top + lnkMenuSystem.Height + 10); 
     lineMenuButtom.EndPoint   = new Point(this.Width - (this.Left + lblTitleMain.Left), lnkMenuSystem.Top + lnkMenuSystem.Height + 10); 

     lnkMenuErrorMessage.Location = new Point(lnkMenuSystem.Left, lineMenuButtom.Y1+5); 
     lnkMessageWelcome.Location  = new Point(lineMenuButtom.X2 - lnkMessageWelcome.Width, lineMenuButtom.Y2 + 5); 
     GlobalVariables.intGeneralLeft = lineMenuButtom.StartPoint.X; 
     GlobalVariables.intGeneralWidth = lineMenuButtom.X2; 
    } 

То, что я хочу спросить это (?): Является ли это правильный способ сделать это?

Причина в том, что я не уверен, что это повлияет на производительность, когда приложение будет работать на старых системах (предполагается, что оно будет использоваться в XP с 2-граммовым RAM Pentium 4 HT или эквивалентной системой).

ответ

6

Нет; это, безусловно, неправильный способ сделать это.
Paint может стрелять очень часто; вы должны делать как можно меньше работы в нем. (и вы, разумеется, не должны изменять макет)

Вместо этого вы должны установить в дизайнере и Dock, чтобы все это происходило автоматически.

+0

Согласен с использованием 'Anchor' и' Dock', если это возможно. Они не были в VB 6 и упростили вашу жизнь в WinForms. В противном случае обработайте событие ['Layout'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.layout.aspx) для панели управления. –

+0

@CodyGray: Еще лучше: В противном случае используйте WPF. – SLaks

+0

@SLaks: Спасибо за ответ и предложение. Я заметил значительный «hicup» в приложении действительно во время выполнения, когда срабатывает метод «paint». Большое спасибо. Что касается WPF, тем не менее, я немного запуган с ним, так как у меня нет опыта с ним, и смотреть на него немного сложно. Я буду использовать его, если больше нет возможности, или если я получаю больше опыта. –

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