Ага, нарешті я зрозумів.
Методів 2:
1( правильний) - свій клас "овальної кнопки" наслідуваний від button, у якому перевизначити деякі методи( малювання кнопки, обробка миші).
2( простий) - як і писав вище, створити будь-який елемент прямокутний( простіше всього Graphics), на якому намалювати свою кнопку, а там вже у обробці кліку визначати чи у зоні миша. Формально це буде прямокутник, фактично - кнопка потрібної форми з єдиним мінусом - неможливістю розміщення чогось іншого у межах цього ж прямокутника - тобто ще один такий овал по діагоналі впритул не вийде розмістити.
зацените какая вундервафля за 2$⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
Сенк кеп, але шарп мс для свого дотнету й вигадали. Да й які класи в С?И да, я не в С, я в C# это ваяю под .NET - там всё немного не так..
Регіон "живиться" об'єктами Drawing.2D, котрі ще треба створити. Тож не думаю, що конструктор отак просто декількома кліками усе сам за тебе зробить. Ну принаймні у ВС2010 конструктор цього не вміє та взагалі не світить властивість Region.1. (поспорю на счет правильный, но для вторичного использования более пригоден) - да, но это очень ты глубоко копнул. Там и так все нужные свойства есть. Не надо их переписывать - все кнопки в демке на форме в дизайнере выглядят обычными квадратными. Действия происходят в конструкторе - именно там им тупо назначается регион.
Ну в билдере вообще плюсы, а не С - то я так сократил, но ты, как всегда, доебался до слов.Сенк кеп, але шарп мс для свого дотнету й вигадали. Да й які класи в С?
Нет, сам не зробыть. Придётся пару функций написать. По выниманию из картинки контура и по назначению его регионом контрола.Регіон "живиться" об'єктами Drawing.2D, котрі ще треба створити. Тож не думаю, що конструктор отак просто декількома кліками усе сам за тебе зробить.
Чё она не светит? Конструктор это виртуальное понятие. Нет там ни какого конструктора, конструктор это кусок кода, где написано чего сделать при создании объекта с этим объектом. Можешь туда руками дописывать что угодно, и чего в нем не светит свойство регион?Ну принаймні у ВС2010 конструктор цього не вміє та взагалі не світить властивість Region.
3. Створюэмо свiй неполноценный класс, в котором 2 нi кому не непотрiбнi, а навiть дуже потрiбнi методи, що я выще визначив. И применяем эти функции к нужным нам контролам при из создании. Это более переносимо и может существовать отдельно, применяясь в любом другом проекте.А так звичайно можна, при чому знову двома способами:
1( правильний) - створюємо свій повноцінний клас бла бла бла...
2( хитрий) - створюємо свій клас, але перевизначаємо у ньому лише 1 нахуй непотрібний метод. А краще метод, що викликає нахуй непотрібний івент, де й реалізуємо сабж.
Надо будет позырить домаСтворена цим класом кнопка при першій же зміні розміру стане еліпсом.
Код:class SquareButton : Button { protected override void OnResize(EventArgs e) { var path = new GraphicsPath(); path.AddEllipse(new Rectangle(x, y, this.Width, this.Height)); this.Region = new Region(path); base.OnResize(e); } }
Я конструктор форм іде мав на увазі.Чё она не светит? Конструктор это виртуальное понятие. Нет там ни какого конструктора, конструктор это кусок кода, где написано чего сделать при создании объекта с этим объектом. Можешь туда руками дописывать что угодно, и чего в нем не светит свойство регион?
Студия или билдер или моно сделают только простейшие действия, которые ты в панели свойств выбрал. Ни кто не мешает им руками помочь.
Я конструктор форм іде мав на увазі.
Рискну выдвинуть идею здесь (поскольку у мну Вася в игноре, да и не пишет давно сюда) - трансформатор тока+мост+активная нагрузка, заведеная на транзистор. А далее - в зависимости от фантазии - либо с собственным питанием (тогда можно и на компаратор), либо на симистор в схему отпирания, чтобы её блокировать и он сам закроется. ...
А, та не, тот умеет только впихивать в конструктор установки, заданные в поле свойств панели инструментов, ну и хедеры создавать.
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
class SquareButton : Button
{
protected override void OnResize(EventArgs e)
{
using (var path = new GraphicsPath())
{
path.AddEllipse(new Rectangle(2, 2, this.Width - this.Width / 10, this.Height - this.Height / 10));
this.Region = new Region(path);
}
base.OnResize(e);
}
}
public class Form1 : Form
{
SquareButton button1;
int i =0;
public Form1()
{
button1 = new SquareButton();
button1.Text = "Click me";
button1.Click +=new EventHandler(button1_Click);
this.Controls.Add(button1);
}
public void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "Im ellipse now")
{
if (i == 1)this.Close();
MessageBox.Show("Im already ellipse. Stop touch me! One more time and FUUUUU");
i++;
return;
}
button1.Size = new Size(100, 70);
button1.Text = "Im ellipse now";
}
}
class Program
{
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
Да чого ж, не лише. Часом дуже допомагає, хоча скоріше як загальний шаблон та джерело шаблонів для купи модулів.
Але це всеодно напівмера. Взагалі властивість Region використовується для повністю зворотнього - обмеження області елемента.
Наприклад можна ту саму область на формі створити і тоді, наприклад, л_клік івент форми генеруватиметься лише якшо клікнули усередині визначеної регіоном області. Вийде 1 в 1 з тим, що є зараз, про що я з самого початку і казав.
Код:using System; using System.Drawing; using System.Windows.Forms; using System.Drawing.Drawing2D; class SquareButton : Button { protected override void OnResize(EventArgs e) { using (var path = new GraphicsPath()) { path.AddEllipse(new Rectangle(2, 2, this.Width - this.Width / 10, this.Height - this.Height / 10)); this.Region = new Region(path); } base.OnResize(e); } } public class Form1 : Form { SquareButton button1; int i =0; public Form1() { button1 = new SquareButton(); button1.Text = "Click me"; button1.Click +=new EventHandler(this.button1_Click); this.Controls.Add(button1); } public void button1_Click(object sender, EventArgs e) { if (button1.Text == "Im ellipse now") { if (i == 1)this.Close(); MessageBox.Show("Im already ellipse. Stop touch me! One more time and FUUUUU"); i++; return; } button1.Size = new Size(100, 70); button1.Text = "Im ellipse now"; } } class Program { static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }
Чого не працює? Овальна кнопка є? Є = працює.
Немає бордеру нормального - ну так ми його й не змінювали, він прямокутний та поза еліпсом. Тому й напівмера.
Невже повилазило? Навіть на твоєму скрині видно той "овал", хоча різниця кольорів і невелика.
На з контрастом.
Але знову ж таки без бордера, без підсвічування. Для реалізації усього цього знову ж таки є 2 варіанти:
1 ( трушний) - нормально перевизначити усі методи, що малюють кнопку.
2 ( як завжди) - наліпити на кнопку картинку№1, а в обробнику івенту наведення миші змінювати на картинку№2. Так загалом і реалізовано у твоєму прикладі.
Фуф, от глагнэ уже тошнит. Возвращаюсь к C#
Ну так що скажеш по сабжу?
Там Васия с загадочным лиТСом ("я уже знаю, но вас, бездельники, поинтригую") пытался устроить конкурс идей на тему самого крутого отключателя (индикатора) нагрузки по превышению определенного тока.
Интересно чем закончилось и кто получил Гран-при