#c# #winforms #pixel #shapes
#c# #winforms #пиксель #формы
Вопрос:
У меня очень мало знаний в C #, и я пытаюсь создать приложение WinForms для создания монохромных растровых изображений размером 8×8 пикселей. Я хочу, чтобы пользовательский интерфейс выглядел так, как показано ниже:
Здесь каждый из полей с черными рамками будет представлять пиксель, и просто, когда пользователь нажимает на один из них, он будет заполнен черным цветом, чтобы «был установлен пиксель».
Я искал способ преобразования стандартного элемента управления кнопками в пользовательскую форму, но не смог найти элегантный способ. Я не хочу создавать эти черные ящики программно, если это возможно. Как я могу создать такие черные ящики, которые будут действовать как кнопка переключения?
Примечание: Я создал образец изображения с помощью инструмента графического проектирования и Visual Studio, он не из реального приложения. Это цель, которую я хочу достичь. В конечном приложении будут другие элементы формы для управления созданным растровым изображением.
Комментарии:
1. Давайте проигнорируем эти серые точки между квадратами..
2. Это выглядит как простой класс, который определяет прямоугольник. A
bool Selected
Color BorderColor
иColor FillColor
свойства с классом manager , который обрабатываетList<RectangleClass>
, определяет размер пробелов и переключаетSelected
значение приRectangle.Contains(Point)
Mouse.Click
событии. СобытиеPaint
/OnPaint
контейнера может передатьe.Graphics
объект классу manager , который рисует все прямоугольники в их текущем состоянии.3. И как только у вас есть пользовательские calss или флажок изображения, вы можете программно поместить их в 2d-массив, чтобы вы могли легко получить координаты x, y
Ответ №1:
Вы хотите использовать 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 */;
затем в событии checked changed просто измените фоновое изображение. Поскольку флажок допускает 2 состояния, вы сможете удобно использовать Checked
свойство, чтобы узнать статус, с которым легче справиться, имея кнопку и сохраняя значение для каждого.
Комментарии:
1. Это точный ответ, который я искал. Выглядит очень просто, но, поскольку я новичок в C #, мне было трудно найти. Спасибо!
Ответ №2:
Это можно сделать с помощью стандартной кнопки. Вам нужно будет установить для свойства кнопки 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.
Комментарии:
1. вы должны изменить все значения
Pixel.
для((Button)sender).
отправителя, которым будет сама кнопка, и если он создаст много кнопок, он сможет затем сопоставить это событие со всеми кнопками вместо того, чтобы писать по одному для каждой.2. @Franck Спасибо, я обновил ответ, чтобы включить это.
Ответ №3:
Сначала я создал 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;
}
}