Пользовательский контроль формы - PullRequest
0 голосов
/ 10 апреля 2019

У меня очень мало знаний о C #, и я пытаюсь создать приложение WinForms для создания монохромных растровых изображений размером 8x8 пикселей.Я хочу, чтобы пользовательский интерфейс выглядел так, как показано ниже:

Form

Здесь каждое из полей с черной рамкой будет представлять пиксель, и просто, когда пользователь щелкает один изони будут заполнены черным, так что «пиксель будет установлен».

Я искал способ преобразования стандартного кнопочного элемента управления в пользовательскую форму, но не смог найти элегантный способ.Я не хочу создавать эти черные ящики программно, если это возможно.Как я могу создать такие черные ящики, которые будут действовать как кнопка переключения?

Примечание. Я создал образец изображения с помощью инструмента графического дизайна и Visual Studio, он не из реального приложения.Это цель, которую я хочу достичь.В конечном приложении будут другие элементы формы для управления созданным растровым изображением.

Ответы [ 3 ]

2 голосов
/ 10 апреля 2019

Вы хотите использовать 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, чтобы узнать состояние, которое легче обрабатывать, чем состояние, имеющее кнопку и сохраняющее значение для каждого.

2 голосов
/ 10 апреля 2019

Это можно сделать с помощью стандартной кнопки.Вам необходимо установить для свойства 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 голос
/ 10 апреля 2019

Сначала я создал 1 кнопку.
В свойствах кнопки установите следующее:

FlatStyle = Flat  
FlatAppearance => BorderColor = Black  
FlatAppearance => BorderSize = 4

Затем скопируйте и создайте еще 63 кнопки и расположите их так же, как на картинке.enter image description here

Для каждой кнопки создайте событие щелчка, и вам нравится следующий код, чтобы при нажатии на него цвет фона становился черным.Если фон уже был черным, он вернется к белому.

private void button1_Click(object sender, EventArgs e)
{
    if (button1.BackColor == Color.Black)
    {
        button1.BackColor = Color.White;
    }
    else
    {
        button1.BackColor = Color.Black;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...