Я довольно новичок в программировании на 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 или эквивалентной системой).
Согласен с использованием 'Anchor' и' Dock', если это возможно. Они не были в VB 6 и упростили вашу жизнь в WinForms. В противном случае обработайте событие ['Layout'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.layout.aspx) для панели управления. –
@CodyGray: Еще лучше: В противном случае используйте WPF. – SLaks
@SLaks: Спасибо за ответ и предложение. Я заметил значительный «hicup» в приложении действительно во время выполнения, когда срабатывает метод «paint». Большое спасибо. Что касается WPF, тем не менее, я немного запуган с ним, так как у меня нет опыта с ним, и смотреть на него немного сложно. Я буду использовать его, если больше нет возможности, или если я получаю больше опыта. –