Siemka, ma ktoś jakiś proste wyjaśnienie jak w Windows Forms zmieniać kolor kliknietego buttona i kolor tekstu na nim, bo kombinuje z różnych stron ale nic nie idzie, ustawiłem sobie czarny button, białą czcionkę, klikam go i czcionka się robi czarna i guzik widać niestety :)
Możesz tak spróbować :)
button1.MouseDown += (o, e) => button1.ForeColor = Color.Green;
button1.MouseUp += (o, e) => button1.ForeColor = Color.Red;
dzięki za odp, ale nie bardzo rozkminiłem o co chodzi bo mi to "e" w nawiasie podkreśla i nie chce nic wyrzuć konkretnego, mógłbyś zrobić projekt w VS i podesłać? gdzie są 2 buttony tak jak pisałem wyżej, a i żeby nie klikać ogólnie ile sie chce tylko raz to jest jeszcze wrzucone w kod
button1.Enabled = false;
button2.Enabled = true;
No to w projekcie w oknie kliknij na button, wybierz eventy (tam gdzie masz właściwości u góry powinna być ikonka chyba pioruna), poszukaj 'Click', dwa razy kliknij, utworzy Ci się w kodzie kod :D
Tam wklej ten kod:
button1.ForeColor = Color.Green;
button1.ForeColor = Color.Red;
z posta wyżej
Kurde chyba nie zajarze o co chodzi w tym badziewiu xd
a może źle opisuję xd więc jeszcze raz od początku :D
chodzi o to, że mam bawie się w windows forms i robiłem sterowanie arduino przez serial port.
Mam 2 buttony jeden od otwierania portu, drugi od zamykania, Otwierający jest niebieski z białym tekstem, zamykający jest czarny z białym tekstem, żeby nie było można kliknąć 2 razy (bardziej mi zależy na tym w przypadku sterowania diodami niż przy portach ale to się pozniej ogarnie) dlatego użyłem tego
buttonPortOpen.Enabled = false;
buttonPortZamknij.Enabled = true;
Kiedy klikam na buttonPortZamknij czcionka robi się czarna i nie widać tekstu, taka sytuacja nie ma miejsca w przypadku jeżeli nie użyje tego wcześniejszego kawałka kodu ale wtedy mogę dowolną ilość razy otwierać port i za każdym razem pika buzzer bo po otworzeniu portu wysyła zmienną która odpowiada za niego. Robiłem tak jak pisaliście wczesniej ale to nic nie daje, cały czas klikam button i czcionka robi się z białej czarna i g...o widać, próbowałem już sposoby z stack, yt i cholera wie co jeszcze. Niżej kody tych 2 buttonów gdyby ktoś miał jakiś pomysł jeszcze :)
//otwieranie portu
private void buttonPortOpen_Click(object sender, EventArgs e)
{
try
{
serialPort1.Open();
serialPort1.Write("1");
textBox1.Clear();
textBox1.AppendText("Port " + serialPort1.PortName + " jest OTWARTY!");
buttonPortOpen.Enabled = false;
buttonPortZamknij.Enabled = true;
}
catch
{
MessageBox.Show("Błąd podczas otwierania portu.", "Sterowanie LED Arduino", MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
//zamykanie portu
private void buttonPortZamknij_Click(object sender, EventArgs e)
{
try
{
textBox1.Clear();
serialPort1.Write("1");
serialPort1.Close();
textBox1.AppendText("Port " + serialPort1.PortName + " jest ZAMKNIETY!");
buttonPortOpen.Enabled = true;
buttonPortZamknij.Enabled = false;
}
catch
{
MessageBox.Show("Błąd podczas zamykania portu.", "Sterowanie LED Arduino", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
było na stacu ;)
public Form1()
{
InitializeComponent();
button1.EnabledChanged += Button1_EnabledChanged;
button2.EnabledChanged += Button1_EnabledChanged;
button1.Paint += (o,e)=> Button1_Paint("button1",o,e);
button2.Paint += (o, e) => Button1_Paint("button2", o, e);
}
private void Button1_EnabledChanged(object sender, System.EventArgs e)
{
var btn =(Button)sender;
btn.ForeColor = btn.Enabled == false ? Color.White : Color.Black;
btn.BackColor = btn.Enabled == false ? Color.Black : Color.White;
}
private void Button1_Paint(string text,object sender, System.Windows.Forms.PaintEventArgs e)
{
dynamic btn = (Button)sender;
dynamic drawBrush = new SolidBrush(btn.ForeColor);
dynamic sf = new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
btn.Text = string.Empty;
e.Graphics.DrawString(text, btn.Font, drawBrush, e.ClipRectangle, sf);
drawBrush.Dispose();
sf.Dispose();
}
private void button1_Click(object sender, EventArgs e)
{
button2.Enabled = true;
button1.Enabled = false;
}
private void button2_Click(object sender, EventArgs e)
{
button1.Enabled = true;
button2.Enabled = false;
}
Lub niezależnie dla każdego buttona w zdarzeniu Click:
if (button1.BackColor == Color.Red && button1.ForeColor == Color.Blue)
{
button1.BackColor = Color.Blue;
button1.ForeColor = Color.Red;
}
else
{
button1.BackColor = Color.Red;
button1.ForeColor = Color.Blue;
}