Я использую Windows Forms, и я хочу определить ширину моего UserControl и изменить AnchorStyle, если ширина была достигнута, она ограничивает.
Вот мой код, который я пытался написать.
if (ucControl.Width > 600)
{
ucControl.Anchor = AnchorStyles.None;
ucControl.Anchor = (AnchorStyles.Bottom | AnchorStyles.Top);
}
else
{
ucControl.Anchor = (AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left);
}
На данный момент, когда я изменяю размер, это уже верхняя и нижняя привязка. Но мне нужны Top и Bottom только тогда, когда они достигают 600, а в остальных случаях ставить якоря во всех направлениях, когда они меньше 600.
Попробуйте событие Resize
вашего пользовательского элемента управления:
public UserControl1()
{
InitializeComponent();
this.Resize += UserControl1_Resize;
}
private void UserControl1_Resize(object sender, EventArgs e)
{
if (this.Width > 600)
...
}
Собственно только что разобрался. Ваш вариант сработал отлично. Все, что мне нужно было сделать, это не превышать ширину в коде, который уже установлен в свойствах.
Спасибо за помощь. я нашел решение. Но не могли бы вы также посоветовать, есть ли операторы If (), если я разверну свой экран или вернусь в нормальное состояние? Пожалуйста, мне это очень нужно для моего проекта.
Могу ли я что-то соврать? иначе если (WindowState = FormWindowState.Maximized;) { }
@ Марк, да, ты можешь использовать WindowState == FormWindowState.Maximized
Мне удалось изменить AnchorStyle при изменении ширины. Теперь я не хочу возвращать стиль привязки, когда верну его размер. но я не могу получить правильный код для обратного изменения размера. Вот мой полный код.
static string Xpos = 348;
private void UControl_Resize(object sender, EventArgs e)
{
Main OP = (Main)ParentForm;
if (this.Width > 699)
{
this.Anchor = AnchorStyles.None;
this.Anchor = (AnchorStyles.Bottom | AnchorStyles.Top);
}
else if (OP.ucControl.Location = Xpos) //This bit doesn't work
{
this.Anchor = (AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left);
}
}
Почему, когда я это делаю, все мои якоря перестают работать? Я знаю, что указываю новую ширину, потому что мне это нужно. Какие-либо предложения?
if (this.WindowState == FormWindowState.Normal)
{
ucChat.FlowChat.Size = new Size(323, 276);
ucChat.FlowChat.Left = (ucChat.ClientSize.Width - ucChat.FlowChat.Width) / 2;
ucChat.FlowChat.Anchor = (AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left);
}
К сожалению, это ничего не делает.