Est-il possible de changer le style d'une bordure WinForm? Je sais que si la bordure est supprimée, elle enlève la fonctionnalité pour redimensionner le programme. Par conséquent, y a-t-il un moyen de changer le style de celui-ci, mais gardez-le redimensionnable?Modifier le style de la bordure WinForm?
3
A
Répondre
6
Ce que vous cherchez n'est pas simple parce que la frontière est dessinée par le système d'exploitation. Cependant, il existe une bibliothèque sur CodePlex qui permet de faire exactement cela.
0
Je ne pense pas qu'il existe un moyen direct de le faire. Mais, vous pouvez définir le style de bordure de formulaire sur Aucun. Et implémenter le redimensionnement dans votre formulaire (ce que je ne pense pas que c'est difficile)
0
string position = String.Empty;
Point mouseDownPosition = new Point();
private void myForm_MouseDown(object sender, MouseEventArgs e)
{
position = (e.X == 0) ? "Left" : ((e.X == myForm.Width) ? "Right" : String.Empty;
position += (e.Y == 0) ? "Top" : ((e.Y == myForm.Height) ? "Bottom" : String.Empty;
if(position != String.Empty)
{
mouseDownPosition = e.Location;
}
}
private void myForm_MouseMove(object sender, MouseEventArgs e)
{
if(position != String.Empty)
{
Point movementOffset = new Point(e.Location.X - mouseDownPosition.X, e.Location.Y - mouseDownPosition.Y);
Switch(position)
{
Case "LeftTop":
myForm.Location.X += movementOffset.X;
myForm.Location.Y += movementOffset.Y;
myForm.Width -= movementOffset.X;
myForm.Height -= movementOffset.Y;
Case "Left":
myForm.Location.X += movementOffset.X;
myForm.Width -= movementOffset.X;
// Complete the remaining please :)
}
}
}
private void myForm_MouseUp(object sender, MouseEventArgs e)
{
position = String.Empty;
}
PS: N'a pas encore testé
espère que vous avez mis à FormBorderStyle Aucun
1
d'abord écrire ceci dans le InitializeComponent():
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_RIGHT = 0xB;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Resize_Form);
Ensuite, utilisez une méthode similaire à ceci. Dans ce cas, ma forme est seulement redimensionnable du côté droit, mais devrait être facile de le faire redimensionne de tout côté:
private void Resize_Form(object sender, MouseEventArgs e)
{
if ((e.Button == MouseButtons.Left) && (MousePosition.X >= this.Location.X + formWidth - 10))
{
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.SizeWE;
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_RIGHT, 0);
formWidth = this.Width;
}
}
Redimensionnement pourrait ne pas être trivial parce que le curseur ne change plus au curseur de taille lorsque vous déplacez la souris aux bords de votre formulaire. – anonymous
Pourrais-je mettre un panneau sur mon formulaire, comme l'image ci-dessus. Et puis avoir cela redimensionner mon formulaire lorsque quelqu'un redimensionne le panneau? Je pourrais faire l'ancre de panneau vers le haut, le bas, la gauche et la droite ainsi elle serait toujours la même taille que le formulaire. Connaissez-vous un code que je pourrais utiliser pour faire cela? –
@MrRoys - changer le curseur sera la chose la plus facile que l'on puisse faire. – SysAdmin