使用自定义边框重新调整无边框形状

时间:2014-04-07 00:55:01

标签: c# winforms

问题不在于我不知道如何使无边框形式重新调整大小,或者如何绘制边框。问题是当您使用该自定义边框重新调整表单大小时会发生什么。

这是截图,因为我不知道如何解释它: When expanding the form with the borders

以下是我创建边框(当前)的方法:

private void Form1_Paint(object sender, PaintEventArgs e)
{
    int width = 1;
    Rectangle rec = this.ClientRectangle;
    ButtonBorderStyle bbs = ButtonBorderStyle.Solid;
    Color clr = Color.Gray;
    ControlPaint.DrawBorder(e.Graphics, rec, clr, width, bbs, clr, width, bbs, clr, width, bbs, clr, width, bbs);
}

重新确定无边界形式的尺寸;我为项目创建了一个存储库 Resize Custom Border - Bitbucket

我不知道为什么会这样,所以我不知道从哪里开始。我只需要绘制一个边框而不用它。我尝试了其他方法来绘制一个,但结果是一样的。

希望这个和存储库对任何试图做同样事情的人都有用。

感谢您抽出时间阅读,如果您这样做了。

2 个答案:

答案 0 :(得分:1)

尝试使用Graphics.DrawRectangle代替DrawBorder

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    Single fWidth = 5.0f;
    Rectangle r = new Rectangle(0,0,this.ClientRectangle.Width-1,this.ClientRectangle.Height-1);
    e.Graphics.DrawRectangle(new Pen(Color.Gray, fWidth), r);
}

protected override void OnResize(EventArgs e)
{
    base.OnResize(e);
    this.Invalidate();
}

答案 1 :(得分:0)

使用图形库:

第1步:覆盖主窗体的OnPaint处理程序

第2步:定义一个覆盖当前表单的矩形

第3步:绘制定义的矩形

protected override void OnPaint(PaintEventArgs e)
{
  Rectangle r = new Rectangle(0,0,this.ClientRectangle.Width-1,this.ClientRectangle.Height-1);
  e.Graphics.DrawRectangle(new Pen(Color.Gray, 1.0f), r);
}

您也可以使用条件语句来实现:

this.form.Resize += // some handler1

//in hadler1
{
   this.form.Paint += // Your new paint handler2
}

//in handler2
{
   Rectangle r = new Rectangle(0,0,this.ClientRectangle.Width-1,this.ClientRectangle.Height-1);
   e.Graphics.DrawRectangle(new Pen(Color.Gray, 1.0f), r);
}