Как сделать так, чтобы в моем окне не было строки заголовка, а отображалось на панели задач с некоторым описательным текстом? Если вы установите свойство формы .Text, тогда .net предоставит ему строку заголовка, что мне не нужно.
this.ControlBox = false;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.ShowInTaskbar = true;
this.Text = "My title for task bar";
Я нашел частичное решение, чтобы переопределить CreateParams:
protected override System.Windows.Forms.CreateParams CreateParams
{
get
{
System.Windows.Forms.CreateParams cp = base.CreateParams;
cp.Style &= ~0x00C00000; // WS_CAPTION
return cp;
}
}
Однако это приводит к изменению размера моего окна, как если бы у него была строка заголовка, то есть оно выше, чем должно быть. Есть ли хорошее решение для этого?





Просто установите для стиля границы значение «Нет».
this.FormBorderStyle = FormBorderStyle.None;
Один из подходов, который следует изучить, может заключаться в установке свойства FormBorderStyle вашего Form на None (вместо FixedDialog).
Недостатком этого подхода является то, что вы теряете границы окна, а также заголовок. В результате вы теряете логику изменения положения / размера формы, которую вы обычно получаете «бесплатно» с Windows Forms; вам нужно будет справиться с этим, реализовав собственную логику перемещения / изменения размера формы в обработчиках событий MouseDown и MouseMove.
Мне также было бы интересно услышать о лучших решениях.
После того, как вы удалили границы с помощью FormBorderStyle, как уже упоминалось, вы можете довольно легко сделать его перетаскиваемым. Я описываю это в http://www.blackwasp.co.uk/DraggableBorderless.aspx.
Абсолютно. Вам также необходимо зафиксировать это, проверяя, насколько вы близки к границе формы, изменяя указатель мыши, получая предпочтительный размер границы из Windows и т. д. Однако это слишком много для одного примера - возможно, я создам другой.
В моем случае у меня есть форма с FormBorderStyle = FormBorderStyle.SizableToolWindow, и следующее переопределение CreateParams помогло (т.е. теперь у меня есть форма без заголовка и без дополнительного поля для заголовка, но он сохраняет заголовок на панели задач):
protected override System.Windows.Forms.CreateParams CreateParams
{
get
{
var parms = base.CreateParams;
parms.Style &= ~0x00C00000; // remove WS_CAPTION
parms.Style |= 0x00040000; // include WS_SIZEBOX
return parms;
}
}
Хороший и примерный, но в реальном мире, но при перетаскивании формы часто возникает больше соображений, например, мы не хотим перетаскивать, если мышь находится над элементом управления или между элементами управления, или хотим изменить размер, если он близок к границы.