自定义形状的表单控件
Custom shaped form control
我对 C# 知之甚少,我正在尝试制作一个 WinForms 应用程序来创建 8x8 像素的单色位图。我希望用户界面如下所示:
在这里,每个黑色边框的框代表一个像素,当用户点击其中一个时,它就会被黑色填充,所以 "pixel would be set"。
我寻找一种将标准按钮控件转换为自定义形状的方法,但找不到优雅的方法。如果可能的话,我不想以编程方式创建这些黑盒子。如何创建像切换按钮一样的黑框?
注意:我使用图形设计工具和 Visual Studio 创建了示例图片,它不是来自真实的应用程序。这是我想要达到的目标。在最终的应用程序中将有其他表单元素来控制创建的位图。
这可以通过标准按钮完成。您需要将按钮的 FlatStyle
属性 设置为 Flat
,并清空 Text
属性,并添加一个 Click
事件。然后可以将每个按钮的点击事件映射到以下方法:
private void Pixel_Click(object sender, EventArgs e)
{
((Button)sender).BackColor = ((Button)sender).BackColor == Color.Black
? Color.White
: Color.Black;
}
可以在 IDE 中轻松调整按钮的大小,使其成为正方形。您还可以在 IDE.
中将初始颜色设置为白色或黑色
您希望使用 CheckBox
控件。
您需要以下属性(不用担心它可以在 属性 网格中设置它只是为了显示实际的 属性 和值):
CheckBox myCheckBox = new CheckBox();
// change the look to a button style
myCheckBox.Appearance = System.Windows.Forms.Appearance.Button;
// put white background to match your design
myCheckBox.BackColor = System.Drawing.Color.White;
// make button style flat to get rid of the 3d-esque look
myCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
// either center image or scale should look good
myCheckBox.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
// set to your empty picture by default and on the checked changed you will swap that
myCheckBox.BackgroundImage = /* whaever image is default */;
然后在选中的更改事件上更改背景图像。复选框确实允许 2 种状态,您将能够很好地使用 Checked
属性 来了解具有按钮并为每个按钮存储值更容易处理的状态。
首先我创建了 1 个按钮。
在按钮的属性中设置以下内容:
FlatStyle = Flat
FlatAppearance => BorderColor = Black
FlatAppearance => BorderSize = 4
然后复制并创建另外 63 个按钮,并像您的图片一样排列。
为每个按钮创建一个点击事件,您喜欢下面的代码,这样当点击它时,它会使背景颜色变为黑色。如果背景已经是黑色,它会将其设置回白色。
private void button1_Click(object sender, EventArgs e)
{
if (button1.BackColor == Color.Black)
{
button1.BackColor = Color.White;
}
else
{
button1.BackColor = Color.Black;
}
}
我对 C# 知之甚少,我正在尝试制作一个 WinForms 应用程序来创建 8x8 像素的单色位图。我希望用户界面如下所示:
在这里,每个黑色边框的框代表一个像素,当用户点击其中一个时,它就会被黑色填充,所以 "pixel would be set"。
我寻找一种将标准按钮控件转换为自定义形状的方法,但找不到优雅的方法。如果可能的话,我不想以编程方式创建这些黑盒子。如何创建像切换按钮一样的黑框?
注意:我使用图形设计工具和 Visual Studio 创建了示例图片,它不是来自真实的应用程序。这是我想要达到的目标。在最终的应用程序中将有其他表单元素来控制创建的位图。
这可以通过标准按钮完成。您需要将按钮的 FlatStyle
属性 设置为 Flat
,并清空 Text
属性,并添加一个 Click
事件。然后可以将每个按钮的点击事件映射到以下方法:
private void Pixel_Click(object sender, EventArgs e)
{
((Button)sender).BackColor = ((Button)sender).BackColor == Color.Black
? Color.White
: Color.Black;
}
可以在 IDE 中轻松调整按钮的大小,使其成为正方形。您还可以在 IDE.
中将初始颜色设置为白色或黑色您希望使用 CheckBox
控件。
您需要以下属性(不用担心它可以在 属性 网格中设置它只是为了显示实际的 属性 和值):
CheckBox myCheckBox = new CheckBox();
// change the look to a button style
myCheckBox.Appearance = System.Windows.Forms.Appearance.Button;
// put white background to match your design
myCheckBox.BackColor = System.Drawing.Color.White;
// make button style flat to get rid of the 3d-esque look
myCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
// either center image or scale should look good
myCheckBox.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
// set to your empty picture by default and on the checked changed you will swap that
myCheckBox.BackgroundImage = /* whaever image is default */;
然后在选中的更改事件上更改背景图像。复选框确实允许 2 种状态,您将能够很好地使用 Checked
属性 来了解具有按钮并为每个按钮存储值更容易处理的状态。
首先我创建了 1 个按钮。
在按钮的属性中设置以下内容:
FlatStyle = Flat
FlatAppearance => BorderColor = Black
FlatAppearance => BorderSize = 4
然后复制并创建另外 63 个按钮,并像您的图片一样排列。
为每个按钮创建一个点击事件,您喜欢下面的代码,这样当点击它时,它会使背景颜色变为黑色。如果背景已经是黑色,它会将其设置回白色。
private void button1_Click(object sender, EventArgs e)
{
if (button1.BackColor == Color.Black)
{
button1.BackColor = Color.White;
}
else
{
button1.BackColor = Color.Black;
}
}