Изменить стиль границы WinForm? - PullRequest
3 голосов
/ 10 апреля 2010

Можно ли изменить стиль рамки WinForm? Я знаю, что если граница удаляется, это лишает функциональность изменения размера программы. Следовательно, есть ли способ изменить его стиль, но сохранить его с изменяемым размером?

Ответы [ 4 ]

6 голосов
/ 10 апреля 2010

То, что вы ищете, не просто, потому что граница рисуется операционной системой. Тем не менее, в CodePlex есть библиотека, которая позволяет делать именно это.

Рисование пользовательских границ в Windows Forms

1 голос
/ 19 апреля 2010

Сначала запишите это в 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);

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

    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;
        }
    }
0 голосов
/ 10 апреля 2010
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;
}

P.S: еще не проверял

Надеюсь, вы установили FormBorderStyle на None

0 голосов
/ 10 апреля 2010

Не думаю, что есть прямой способ сделать это.

Но вы можете установить стиль границы формы на Нет. И осуществите изменение размера в вашей форме (что я не думаю, что это сложно)

...