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

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

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

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

Замена видеокарты на другую
Здрасти. Хочу приобрести на свой комп INTELR core(tm) i5-4670 cpu @3.40ghz 3.40ghz, ОЗУ 16гб ,...

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

Замена оперативки на другую
Хочу заменить оперативочку (на 2 Гб) на оперативку хотя бы с объёмом 4 Гб. На ноуте один слот....

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

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
BroDMax
156 / 155 / 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
156 / 155 / 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
156 / 155 / 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

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

Замена одной подстроки на другую
Есть ли функция, которая может заменить все вхождения подстроки strl на подстроку strl2? Если нет,...

Замена части строки на другую
Значит так... Дана строка например (2 * (2+3)) Я уже написала функцию, которая вычисляет...

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

Замена капчи в phpBB 3.0.8 на другую
как заменить капчу в phpBB 3.0.8 на другую?там файла "usercp_confirm.php" вообще нигде нет(( ...


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

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

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