winform设置窗体无边框
- 窗体默认外观

- 将Form的属性FormBorderStyle修改为None

- 拖一个panel控件,并将dock属性设为Top,固定在顶部,再设置一下背景颜色

- 拖一个label控件,设置图标字体和Text内容,0是最小化图标,1是最大化,r是关闭图标

- 复制label,设计成如下效果

- 依次给label绑定点击事件

- 事件处理
// 点击关闭
private void close_Click(object sender, EventArgs e)
{
this.Close();
}
// 点击最小化
private void min_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
}
// 点击最大化
private void maxOrNor_Click(object sender, EventArgs e)
{
if (WindowState != FormWindowState.Maximized)
{
// 设置窗口最大化不遮盖底部任务栏
this.MaximizedBounds = Screen.PrimaryScreen.WorkingArea;
WindowState = FormWindowState.Maximized;
// 更改为折叠窗口图标,maxOrNor为关闭label的名字
maxOrNor.Text = "2";
}
else
{
WindowState = FormWindowState.Normal;
// 更改为最大化图标
maxOrNor.Text = "1";
}
}- 设置鼠标进入事件,鼠标进入图标区域修改颜色
// 鼠标进入
private void Control_MouseEnter(object sender, EventArgs e)
{
Label lb = sender as Label;
lb.BackColor = Color.White;
lb.ForeColor = Color.LightBlue;
}
// 鼠标按下
private void Control_MouseDown(object sender, EventArgs e)
{
Label lb = sender as Label;
lb.BackColor = Color.Blue;
lb.ForeColor = Color.White;
}
// 鼠标离开
private void Control_MouseLeave(object sender, EventArgs e)
{
Label lb = sender as Label;
lb.BackColor = Color.Transparent;
lb.ForeColor = Color.Black;
}- 在onLoad方法中给label绑定3个事件,
private void Form1_Load(object sender, EventArgs e)
{
// ControlPanel是panel的Name属性
foreach (Control c in this.ControlPanel.Controls)
{
if (c is Label)
{
c.MouseEnter += Control_MouseEnter;
c.MouseLeave += Control_MouseLeave;
c.MouseDown += Control_MouseDown;
}
}
}- 是否显示由窗体的ControlBox属性控制
private void Form1_Load(object sender, EventArgs e)
{
// 是否显示由窗体的ControlBox属性控制
close.Visible = this.ControlBox;
maxOrNor.Visible = this.ControlBox;
min.Visible = this.ControlBox;
this.MaximizedBounds = Screen.PrimaryScreen.WorkingArea;
foreach (Control c in this.ControlPanel.Controls)
{
if (c is Label)
{
c.MouseEnter += Control_MouseEnter;
c.MouseLeave += Control_MouseLeave;
c.MouseDown += Control_MouseDown;
}
}
}- 设置窗口可缩放
const int WM_NCHITTEST = 0x0084;// 移动鼠标
const int HTLEFT = 10; //左边界
const int HTRIGHT = 11; //右边界
const int HTTOP = 12; //上边界
const int HTTOPLEFT = 13; //左上角
const int HTTOPRIGHT = 14; //右上角
const int HTBOTTOM = 15; //下边界
const int HTBOTTOMLEFT = 0x10; //左下角
const int HTBOTTOMRIGHT = 17; //右下角
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
switch (m.Msg)
{
case WM_NCHITTEST:
if ((this.MaximizeBox == true && this.WindowState == FormWindowState.Normal))
{
Point vPoint = new Point((int)m.LParam & 0xFFFF,
(int)m.LParam >> 16 & 0xFFFF);
vPoint = PointToClient(vPoint);
if (vPoint.X <= 5)
if (vPoint.Y <= 5)
m.Result = (IntPtr)HTTOPLEFT;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)HTBOTTOMLEFT;
else m.Result = (IntPtr)HTLEFT;
else if (vPoint.X >= ClientSize.Width - 5)
if (vPoint.Y <= 5)
m.Result = (IntPtr)HTTOPRIGHT;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)HTBOTTOMRIGHT;
else m.Result = (IntPtr)HTRIGHT;
else if (vPoint.Y <= 5)
m.Result = (IntPtr)HTTOP;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)HTBOTTOM;
}
break;
}
}- 缩放时设置图标没有往右靠

- 选中3个按钮,Anchor改为Top,Right

- 设置窗口可拖动
给panel绑定MouseDown/MouseMove/MouseUp事件
// 鼠标拖动前按下位置
Point p;
// 标识是否拖动
bool isMoving = false;
private void panelTop_MouseDown(object sender, MouseEventArgs e)
{
// 鼠标按下的点
p = e.Location;
isMoving = true;
}
private void panelTop_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && isMoving == true)
{
// 拖动距离
Point pNew = new Point(e.Location.X - p.X, e.Location.Y - p.Y);
// 当前位置+拖动距离
this.Location += new Size(pNew);
}
}
private void panelTop_MouseUp(object sender, MouseEventArgs e)
{
isMoving = false;
}
Ценники на вывоз мусора сейчас космос, любые лайфхаки по экономии в тему.
1xbet onlayn kazino platforması ilə vaxtınızı daha səmərəli və maraqlı keçirin. Saytın canlı kazino bölməsi istifadəçilərə fərqli bir dünya təklif edir. Burada canlı dilerli kazino oyunlarının hər bir növünü sınaqdan keçirə bilərsiniz. Krupyelərin peşəkarlığı oyunun dinamikasını və marağını artırır. Müntəzəm olaraq yenilənən oyun siyahısı cansıxıcılığa yol vermir. Hesabınızı artırmaq üçün onlarla fərqli və etibarlı üsul mövcuddur. Qazanılan pullar cəmi bir neçə dəqiqə ərzində şəxsi hesabınıza köçürülür. Aktiv fəaliyyətinizə görə fərdi bonuslar və hədiyyələr qazana bilərsiniz. Dəstək xidməti həm çat, həm də e-poçt vasitəsilə kömək göstərir. 1xbet ailəsinə qoşulun və böyük uduşlar üçün ilk addımı atın. onlayn kazino
我一直梦想, 看到你们相册那样的地方。真棒。
我喜欢, 这里分享真实经验。你的项目 就是 属于这里的。请继续。
我热爱这样的想法, 去那么多国家。真的很鼓舞。
能感受到热爱。继续保持 感受。
我关注这样的资源, 写得很实在。你的网站 就是 属于这里的。加油。
1
1
1