C# Anchor 和Dock

一、Dock与Anchor是什么?
1.Dock
①Dock在英文中是停泊的意思,表示控件的某个边与窗体重合(零距离)。控件的变化则在设计的时候就能呈现。此外控件的DocK循序会影像到结果。 ②Dock有Bottom,Fill,Left,None,Right,Top六种DockStyle类型。其中Bottom意为该控件的下边缘停靠在其包含控件的底部,Fill意为该控件的各个边缘分别停靠在其包含控件的各个边缘,Left意为该控件的左边缘停靠在其包含控件的左边缘,Right意为该控件的右边缘停靠在其包含控件的右边缘,Top意为该控件的上边缘停靠在包含控件的顶端,None意为该控件未停靠。

2.Anchor

①Anchor在英文中是锚定的意思,表示在窗体重置时控件与窗体(或者父控件)的 相对位置保持不变 。控件变化要等到窗体重置的时候才能呈现。 ②当控件放置于窗体时,默认的anchor设置是“顶部、左边”,这使得控件和窗体的顶边和左边缘固定相关。

3.C#学习笔记:控件的Dock属性使用,工具栏遮挡解决

Dock属性说明

该属性的用途类似于JAVA中的边框布局。绑定区域类似于东西南北中。
Top:顶部,将控件绑定到窗体或页面的顶部,控件跟随顶部移动,一般ToolStrip就是这样的模式
Bottom:底部,将控件绑定到页面底部,一般StatuStrip就是这样的模式,绑定到底部用于显示状态信息。
Fill:填充模式,控件填充到容器的中间部分,跟四周绑定,跟随窗体或者容器的变化而变化。

Fill填充使用问题

Fill填充时有时候会出现填充区域被遮挡的,比如说被工具栏遮挡,或者被状态栏遮挡的情况,后面经过查找资料和对比有遮挡的窗体和没有遮挡的窗体,发现这个问题是由于控件的层级结构差异导致的,当Fill填充的控件的层级比其他等级低的时候,就会别遮挡,如果要避免其他控件遮挡住,需要将浮在上面的控件的层即设置的比欲填充的控件更低,这样Fill填充后就不会被遮挡。
可右键点击遮挡的控件选择置于底层,这样该控件就不会遮挡住了。
————————————————
原文链接:https://blog.csdn.net/u010839204/article/details/101483881

根据以上实验,得出以下结论:

  1. C#窗体控件的叠加顺序取决于代码中控件的添加顺序,后添加的居于之前添加的控件的上层;
  2. 控件的Dock填充顺序是从底层控件开始依次往上,上层控件填充之前控件填充后剩余的空间;

c# winform TableLayoutPanel 动态删除一行,动态添加行列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
this.pictureBox1_1.Visible = true;
this.pictureBox1_2.Visible = true;
this.pictureBox1_3.Visible = true;
this.pictureBox1_4.Visible = true;
this.pictureBox2_1.Visible = false;
this.pictureBox2_2.Visible = false;
this.pictureBox2_3.Visible = false;
this.pictureBox2_4.Visible = false;
this.pictureBox3_1.Visible = false;
this.pictureBox3_2.Visible = false;
this.pictureBox3_3.Visible = false;
this.pictureBox3_4.Visible = false;
this.pictureBox4_1.Visible = false;
this.pictureBox4_2.Visible = false;
this.pictureBox4_3.Visible = false;
this.pictureBox4_4.Visible = false;
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.ColumnCount = 2;

C# tableLayoutPanel动态加载控件闪烁的解决方案

解决办法:

在调用自定义控件的窗体内添加的:

1
2
3
4
5
6
7
8
9
protected override CreateParams CreateParams
{
    get
    {
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
    }
}

在自定义控件中添加的:

1
2
3
4
5
6
7
8
9
protected override CreateParams CreateParams
{
get
   {
var parms = base.CreateParams;
parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN
return parms;
}
}

来源:WinForm 加载自定义控件闪烁问题 - k_est - 博客园 (cnblogs.com)

开机启动CSharp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/// <summary>
/// 开机自启动
/// </summary>
/// <param name="isAuto">是否启用</param>
internal static void AutoRunAfterStartup(bool isAuto)
{
try
{
if (isAuto == true)
{
RegistryKey R_local = Registry.LocalMachine; //RegistryKey R_local = Registry.CurrentUser;
RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
R_run.SetValue("应用名称", Application.ExecutablePath);
R_run.Close();
R_local.Close();
}

else
{
RegistryKey R_local = Registry.LocalMachine; //RegistryKey R_local = Registry.CurrentUser;
RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
R_run.DeleteValue("应用名称", false);
R_run.Close();
R_local.Close();
}
}
catch { } //需要Try起来,不然在VS中启动时这里会报错
}