Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
uberfurer
2 / 2 / 1
Регистрация: 31.08.2015
Сообщений: 41
Завершенные тесты: 1
1

Замена кнопки на другую

19.11.2015, 16:00. Просмотров 1117. Ответов 10
Метки нет (Все метки)

Доброго времени суток!Уважаемые форумчане.
У меня такая проблема:
Как сделать так чтоб кнопка в winforms менялась на другую?Конкретнее, у меня есть кнопка(например как кнопка power системного блока ПК), при нажатии на нее выполняется определенный метод, попутно кнопка загорается.
То есть мне нужно сделать что-то по типу кнопки с фиксацией. Интересует как заменить одну кнопку на другую и соответственно обратно при повторном нажатии.
Еще интересует как сделать кнопку по размеру формы, при этом чтоб можно было тягать форму по экрану за саму кнопку.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2015, 16:00
Ответы с готовыми решениями:

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

Передача события от кнопки одной формы в другую форму.
Есть две формы Form1 i Form2. При нажатии на батон в Форм1 появляется Форм2. На Форм2 у меня есть...

Как удалить динамические кнопки нажав на другую кнопку
Не могу удалить кнопки, которые создаются в button 2 и button 3 (plusRight и plusDown). Их нужно...

Как при нажатии кнопки RadioButton вызвать другую форму
Скажите, пожалуйста, как при нажатии кнопки RadioButton открывалась другая форма. Находил тему, где...

Как перейти с одной формы на другую при нажатии кнопки
Есть форма Допустим Form1,и на ней есть кнопка(button1) при нажатии на которую она должна перейти...

10
Phell
0 / 0 / 1
Регистрация: 18.11.2015
Сообщений: 5
19.11.2015, 16:05 2
Кидаешь 2 кнопки на форму, для второй кнопки ставишь в свойствах - visible: false, при нажатии первой кнопки:
C#
1
2
button1.visible = false;
button2.visuble = true;
при нажатии на вторую кнопку - также но наоборот.
0
uberfurer
2 / 2 / 1
Регистрация: 31.08.2015
Сообщений: 41
Завершенные тесты: 1
19.11.2015, 16:09  [ТС] 3
Спасибо, я так и предполагал.
Есть ли другие варианты решения?
Также, все же, как сделать кнопку на всю форму(совсем на всю, без верхней панели) и чтоб можно было перетягивать форму с любой ее точки.
0
Phell
0 / 0 / 1
Регистрация: 18.11.2015
Сообщений: 5
19.11.2015, 16:15 4
Цитата Сообщение от uberfurer Посмотреть сообщение
Спасибо, я так и предполагал.
Есть ли другие варианты решения?
Также, все же, как сделать кнопку на всю форму(совсем на всю, без верхней панели) и чтоб можно было перетягивать форму с любой ее точки.
Если кнопки одного размера и в одном месте - сделать нужную кнопку поверх другой, метод BringToFront вроде.
чтобы сделать кнопку на всю форму - можно убрать рамку и сами кнопки управления(свернуть, закрыть...), это вроде можно убрать в свойствах формы - FormBorderStyle - none.

А перетаскивать с любого места - берем события формы которые отвечают за положения мышки на форме( в нажатом положении ) и обрабатываем их и задаем новые координаты формы.
0
19.11.2015, 16:15
BroDMax
155 / 154 / 104
Регистрация: 01.10.2015
Сообщений: 310
19.11.2015, 16:29 5
Лучший ответ Сообщение было отмечено uberfurer как решение

Решение

uberfurer, вот, постарался и сделал Разместите на форме кнопку button1 и замените код на это:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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;
using System.Runtime.InteropServices;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.button1.Click += Function1;
            this.button1.MouseMove += Button1_MouseMove;
            this.button1.Dock = DockStyle.Fill;
        }
 
        private void Function1(object sender, EventArgs e)
        {
            this.button1.Click -= Function1;
            this.button1.Click += Function2;
            // Выполняем какие-либо действия, например:
            button1.BackColor = Color.Green;
            MessageBox.Show("Включено");
        }
 
        private void Function2(object sender, EventArgs e)
        {
            this.button1.Click -= Function2;
            this.button1.Click += Function1;
            // Выполняем какие-либо действия, например:
            button1.BackColor = SystemColors.Control;
            MessageBox.Show("ВЫключено");
        }
 
        public const int WM_NCLBUTTONDOWN = 0xA1;
        public const int HT_CAPTION = 0x2;
 
        [DllImportAttribute("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
        [DllImportAttribute("user32.dll")]
        public static extern bool ReleaseCapture();
 
        private void Button1_MouseMove(object sender, MouseEventArgs e)
        {
            ReleaseCapture();
            SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
        }
    }
}
Захват и перемещение формы взято отсюда.

Добавлено через 2 минуты
Phell, обратите внимание, что свойством Visible я не пользовался, просто переприсваивал обработчики событий на Function1 или Function2).
P.S. Не забудьте про свойство FormBorderStyle - none
1
uberfurer
2 / 2 / 1
Регистрация: 31.08.2015
Сообщений: 41
Завершенные тесты: 1
19.11.2015, 17:48  [ТС] 6
Спасибо большое!
Буду пробовать

Добавлено через 43 минуты
Все работает как часы!)Спасибо большущее!

Добавлено через 14 минут
Извиняюсь за отвлечение от темы, но у меня появилась проблема, которая в начале создания моей программы не возникала, но в итоге возникла по неизвестным причинам..
Когда я закрываю окно программы процесс не убивается, с чем это может быть связано?
0
BroDMax
155 / 154 / 104
Регистрация: 01.10.2015
Сообщений: 310
19.11.2015, 17:50 7
Цитата Сообщение от uberfurer Посмотреть сообщение
Когда я закрываю окно программы процесс не убивается, с чем это может быть связано?
Значит, в каком-то другом потоке происходят вычисления. Вы пользуетесь потоками?
1
uberfurer
2 / 2 / 1
Регистрация: 31.08.2015
Сообщений: 41
Завершенные тесты: 1
19.11.2015, 18:07  [ТС] 8
Пользуюсь, приходится создавать новую среду для того чтоб не вис winforms от Thread.Sleep().
Я так понимаю, что нужно убивать среду когда нужно выйти.
Как можно убивать среду в методе?(У меня есть метод убийства процесса, который запускает моя программа, могу в него впихнуть)
И как это делать при закрытии программы?
Я был бы очень признателен за ответ.
0
BroDMax
155 / 154 / 104
Регистрация: 01.10.2015
Сообщений: 310
19.11.2015, 18:10 9
Цитата Сообщение от uberfurer Посмотреть сообщение
приходится создавать новую среду для того чтоб не вис winforms от Thread.Sleep()
Я не знаю, что делает Ваша программа, и зачем "Убивать среду"? Нужно просто завершить поток, который зависает – тогда закроется программа – тогда остановится дебаг – тогда среда не будет виснуть и очнется!
1
uberfurer
2 / 2 / 1
Регистрация: 31.08.2015
Сообщений: 41
Завершенные тесты: 1
19.11.2015, 18:25  [ТС] 10
"Убивать среду" - это я образно. Я имел в виду то, что я подумал что нужно прекратить работу второй среды.
Возможно я неправильно понимаю в чем именно проблема незавершения потока. Но мне казалось, что именно из-за двух сред. Я закрываю форму, а программа продолжает работать...
Создаю среду я для того что бы задержка(то есть Sleep)не заставляла виснуть форму.
Моя программа запускает другую, по кнопке, в бесконечном цикле(ждет 30 секунд и выключает), или по кнопке выключает.
Ничего особенного...
Тогда напрашивается вопрос: Как мне прекратить работу второй среды?
0
craftersmine
30 / 28 / 9
Регистрация: 06.06.2014
Сообщений: 350
Завершенные тесты: 4
30.11.2015, 18:47 11
C#
1
Application.Exit();
1
30.11.2015, 18:47
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2015, 18:47

Замена файла по нажатию кнопки
Подскажите пожалуйста, как можно сделать так, что бы при нажатии на кнопку у меня один файл...

Как реализовать переход в другую форму по нажатию кнопки в исходной форме?
Делаю формы Form1 и Form2 На Form1 делаю кнопку для перехода на Form2 Что вписывать в кнопку?

Как написать ссылку из одной формы в другую (при нажатии кнопки)
Как написать ссылку из одной формы в другую (при нажатии кнопки)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.