Как сделать в visual studio программу с кнопками

Да-да, я знаю, что лучше не делать на Windows Forms красивые приложения – для этого есть WPF. Однако, если проект уже разросся, то переносить его из-за пары красивостей не хочется. Тем более, что при достаточной сноровке можно делать симпатичные кнопочки и на Windows Forms.

Итак, сначала создаем кнопку. Называем её неоригинально – button1. Сначала закругляем ей края при загрзуке формы (событие лоад):

System.Drawing.Drawing2D.GraphicsPath Button_Path = new System.Drawing.Drawing2D.GraphicsPath(); Button_Path.AddEllipse(-10, -9, this.button1.Width+20, 40); Region Button_Region = new Region(Button_Path); this.button1.Region = Button_Region;

Числа подбираются индивидуально — чтобы края у кнопки были закруглены равномерно — я же не заню, какого размера она у вас.

Теперь нам надо закрасить кнопку. Но не просто однотонно, а с градиентом. Это тоже реализуется довольно просто. В обработчик перерисовщика кнопки кидаем:

private void button1_Paint(object sender, PaintEventArgs e)

Элемент кнопка в Visual Studio 2022

И получается вот такая картина:

Не сказать, чтобы очень красиво, но своей цели мы все же добились. Если вам требуется помощь программиста по C# или другим языкам программирования, то вы можете написать мне — за небольшую плату я вам с удовольствием помогу.

Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

заметки, visual studio, windows forms

Источник: upread.ru

Как сделать в visual studio программу с кнопками

Честно говорю, что я искал, как это делается, но не понял. Мне нужно, чтобы один раз нажал кнопку в программе, и с этого момента началось циклическое выполнение действий. Типа того:

Как можно такое сделать?

Регистрация: 15.02.2010
Сообщений: 15,411

Есть такое понятие как обработчик нажатия кнопки. Обычно в него можно попасть дважды кликнув на нужной кнопке в дизайнере.

Форумчанин
Регистрация: 12.02.2010
Сообщений: 787

А может как-то проще можно сделать? Я понял, что при каждом нажатии на кнопку я могу изменять значение некоторой переменной с True на False, а при обработке менять цвет кнопки, например.
Но вот можно подробнее насчет «нужной кнопки в дизайнере»?

Читайте также:
Как перенести qt программу на другой компьютер

Регистрация: 12.01.2011
Сообщений: 19,500

Чего подробнее?

Регистрация: 15.02.2010
Сообщений: 15,411

А может как-то проще можно сделать? Я понял, что при каждом нажатии на кнопку я могу изменять значение некоторой переменной с True на False, а при обработке менять цвет кнопки, например.

Создание оконного приложения С++/Visual studio 2019/Windows Form

Ну зависит от задачи и проектирования. Можно отдельный рабочий поток запустить и кнопкой переключать его состояние, модно цикл в кнопку всунуть.

Форумчанин
Регистрация: 12.02.2010
Сообщений: 787

А, понятно, ну я-то в курсе события Click. Мне-то именно это и надо, чтобы кнопка принимала 2 состояния — нажатое, и отжатое. Сейчас я имею лишь кнопку, на которую можно просто кликать, у меня по этому клику выполняется код, 1 раз.

А мне-то надо так: нажал на кнопу — она изменилась и стала нажатой, и циклически работает тот код, который я прописал для такого положения кнопки. Вот как это сделать?

Я на таком уровне в решении данного вопроса:

private void button1_Click(object sender, EventArgs e) < btn1pos = !btn1pos; if (btn1pos == true) < this.Controls[«button1»].UseWaitCursor = false; >if (btn1pos == false) < this.Controls[«button1»].UseWaitCursor = true; >>
Думаю, что все можно сделать намного проще, вот и спрашиваю.
Последний раз редактировалось Krasi; 09.10.2015 в 15:15 .
Регистрация: 15.02.2010
Сообщений: 15,411

1. Берете CheckBox и Appearance ставите в Баттон.
2. Делаете какой-либо флаг и перерисовываете кнопку соответствующе.
3. Используйте сторонние компоненты
4. Сами отрисуйте
.

Регистрация: 12.01.2011
Сообщений: 19,500

Да куда уж проще, вроде и так просто.

В чем смысл писать Controls[«button1»] если у вас уже есть созданная дизайнером переменная button1?

И == true/false обычно не пишут для boolean выражений. Достаточно if(btn1Pos)/if(!btn1Pos) (или просто else).

Форумчанин
Регистрация: 12.02.2010
Сообщений: 787

А можете подсказать, что у меня происходит не так? То есть сейчас вроде при первом нажатии должен работать мой код, а при втором — не должен, при третьем — снова должен и тп. Так вот, рассмотрим ситуацию на деле.

private void button1_Click(object sender, EventArgs e) < btn1pos = !btn1pos; ZedGraphControl zedGraph = new ZedGraphControl(); zedGraph.Location = new System.Drawing.Point(100, 10); zedGraph.Name = «zedGraph»; zedGraph.Size = new System.Drawing.Size(500, 300); this.Controls.Add(zedGraph); ZedGraphControl zgc = zedGraph; GraphPane myPane = zgc.GraphPane; if (btn1pos) < this.Controls[«button1»].UseWaitCursor = false; /////////////////Представляем символы в двоичном виде и выводим на график///////////////// ////////////////////////////////////////////////////////////////////////////////////////// string A = richTextBox1.Text; string str_bin = asbin(A); byte[] strBytes = System.Text.Encoding.Unicode.GetBytes(A); //string str = Encoding.ASCII.GetString(strBytes); StringBuilder sb = new StringBuilder(); foreach (byte b in System.Text.Encoding.Unicode.GetBytes(A)) sb.Append(Convert.ToString(b, 2).PadLeft(8, ‘0’)).Append(‘ ‘); string binaryStr = sb.ToString(); //////////////Массив 0 и 1 this.Controls[«richTextBox2»].Text = str_bin; ////////////////////////////////////////////////////////////////Создание значений x // Set the titles and axis labels myPane.Title = «Бинарные данные»; myPane.XAxis.Title = «n, выборки»; myPane.YAxis.Title = «bin_data, единицы»; PointPairList list = new PointPairList(); int l = strBytes.Length; int[] myArr = new int[l]; // Инициализируем каждый элемент массива вручную for (int i = 0; i < l; i++) < myArr[i] = i; list.Add(myArr[i], strBytes[i]); >LineItem myCurve = myPane.AddCurve(«bin_data», list, Color.Green, SymbolType.Diamond); zgc.AxisChange(); zgc.Refresh(); > if (!btn1pos) < this.Controls[«button1″].UseWaitCursor = true; >> static string chr2(char c) < string s = » «; for (; c != ‘’; c = (char)((byte)c >> 1)) s = ((((byte)c 1» : «0») + s; return s; > static string asbin(string s)

Читайте также:
Программа которая расставляет запятые

Я нажимаю на этот батон) первый раз, и тогда строится график и в окошко №2 выводятся бинарные данные текста, введенного в окошко №1.

Теперь мистика. Я сокращаю текст. Нажимаю батон, теперь он false, нажимаю еще, он снова true. И график должен бы поменяться, как и содержимое окна № 2. Но содержимое окна меняется, а вот график остается прежним. Где я что упустил?

Форумчанин
Регистрация: 12.02.2010
Сообщений: 787

private void checkBox1_CheckedChanged(object sender, EventArgs e) < if (checkBox1.Checked) < this.Controls[«checkBox1»].ForeColor = Color.Green; /////////////////Представляем символы в двоичном виде и выводим на график///////////////// ////////////////////////////////////////////////////////////////////////////////////////// string A = richTextBox1.Text; string[] B = new string[1000]; int i = 0; foreach (char x in A) < B[nSymbol] += x; i++; if (i == 56) < i = 0; nSymbol++; >> //this.Controls[«richTextBox2»].Text = B[1]; string s = «Hello»; < for (i = 1; i > > > else < this.Controls[«checkBox1»].ForeColor = Color.DarkRed; this.Controls[«richTextBox2»].Text = «»; >>

Сейчас у меня 2 состояния с помощью CheckBox с опцией Button.

Когда состояние нажатое, программа заходит в цикл, в котором обновляет форму, поэтому я на экране сейчас вижу, как у меня текстовое поле все время дополняется новыми символами. Но я не могу остановить этот процесс! Я бы хотел нажать на кнопку (которая чек баттон) второй раз, и чтобы произошел выход из цикла. Но я понял, что меня сдерживает то, что все операции уже происходят в теле функции нажатия на кнопку. Что мне делать?

Источник: www.programmersforum.ru

Программирование C#

Когда курсор мыши находится на изображении, мы хотим чтобы вид курсора изменился на рука. Для этого в свойстах двух PictureBox для Cursor выбираем Hand.

Теперь создаем событии для клика, где например должен выводится какое то сообщения
private void pictureBox1_Click(object sender, EventArgs e)
<
MessageBox.Show(«Check Button is Clicked!»);
>

Читайте также:
Убрать пароль администратора программа

private void pictureBox2_Click(object sender, EventArgs e)
<
MessageBox.Show(«Cross Button is Clicked!»);
>

Давайте теперь сделаем немного анимацию. Мы например хотим, чтобы когда курсор мыши находится на PictureBox размер изображении изменился. Для этого для каждого изображении создаем события MouseHover и MouseLeave. То что будет с MouseLeave думаю всем понятно, изображения будет принимать свой прежний размер.
private void pictureBox1_MouseLeave(object sender, EventArgs e)
<
pictureBox1.Image = Check;
>

private void pictureBox2_MouseLeave(object sender, EventArgs e)
<
pictureBox2.Image = Cross;
>

А вот с MouseHover мы должны изменить размер изображении допустим на 20%. Вот две события для изменения размеров изображений
private void pictureBox1_MouseHover(object sender, EventArgs e)
<
int Check_Width = Check.Width + ((Check.Width * 20) / 100);
int Check_Height = Check.Height + ((Check.Height * 20) / 100);

Bitmap Check_1 = new Bitmap(Check_Width, Check_Height);
Graphics g = Graphics.FromImage(Check_1);
g.DrawImage(Check, new Rectangle(Point.Empty, Check_1.Size));
pictureBox1.Image = Check_1;
>

private void pictureBox2_MouseHover(object sender, EventArgs e)
<
int Cross_Width = Cross.Width + ((Cross.Width * 20) / 100);
int Cross_Height = Cross.Height + ((Cross.Height * 20) / 100);

Bitmap Cross_1 = new Bitmap(Cross_Width, Cross_Height);
Graphics g = Graphics.FromImage(Cross_1);
g.DrawImage(Cross, new Rectangle(Point.Empty, Cross_1.Size));
pictureBox2.Image = Cross_1;
>

Вот польный код программы
using Image_as_Button.Properties;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Image_as_Button
<
public partial class Form1 : Form
<
Image Check = Resources.check;
Image Cross = Resources.cross;

public Form1()
<
InitializeComponent();
pictureBox1.Image = Check;
pictureBox2.Image = Cross;
>

private void pictureBox1_Click(object sender, EventArgs e)
<
MessageBox.Show(«Check Button is Clicked!»);
>

private void pictureBox2_Click(object sender, EventArgs e)
<
MessageBox.Show(«Cross Button is Clicked!»);
>

private void pictureBox1_MouseHover(object sender, EventArgs e)
<
int Check_Width = Check.Width + ((Check.Width * 20) / 100);
int Check_Height = Check.Height + ((Check.Height * 20) / 100);

Bitmap Check_1 = new Bitmap(Check_Width, Check_Height);
Graphics g = Graphics.FromImage(Check_1);
g.DrawImage(Check, new Rectangle(Point.Empty, Check_1.Size));
pictureBox1.Image = Check_1;
>

private void pictureBox2_MouseHover(object sender, EventArgs e)
<
int Cross_Width = Cross.Width + ((Cross.Width * 20) / 100);
int Cross_Height = Cross.Height + ((Cross.Height * 20) / 100);

Bitmap Cross_1 = new Bitmap(Cross_Width, Cross_Height);
Graphics g = Graphics.FromImage(Cross_1);
g.DrawImage(Cross, new Rectangle(Point.Empty, Cross_1.Size));
pictureBox2.Image = Cross_1;
>

private void pictureBox1_MouseLeave(object sender, EventArgs e)
<
pictureBox1.Image = Check;
>

private void pictureBox2_MouseLeave(object sender, EventArgs e)
<
pictureBox2.Image = Cross;
>
>
>

Источник: csharping-master.blogspot.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru