Ranjith Gaddi Ответов: 1

Как можно использовать одну кнопку для работы с несколькими логиками


В оконном программировании C# ,
используя графику я должен нарисовать два графических изображения,
это должно произойти только тогда, когда я нажму кнопку
И только одна кнопка должна работать для обоих изображений.
например
===========
текст кнопки по умолчанию = " улыбка"
когда я первый раз нажимаю на кнопку, она шолуд выводит одно из изображений, а текст кнопки шолуд меняется на " грустный"
Теперь, когда я снова нажимаю на ту же кнопку(текст которой изменен на sad), должно отображаться второе изображение, а текст кнопки должен быть изменен на значение по умолчанию(то есть "улыбка").
это должно быть продолжено для разных времен нажатия кнопок.

Спасибо.

Что я уже пробовал:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Pen p = new Pen(Color.RosyBrown, width: 3);
            int w = this.ClientSize.Width;
            int h = this.ClientSize.Height;
            //g.DrawRectangle(p,h/2,w/2, 100, 100);
            g.DrawEllipse(p, w / 3, h / 4, 150, 120);
            Point p1 = new Point();
            p1.X = 100; p1.Y = 100;
            g.DrawEllipse(p, w / 3 + 40, h / 3 + 10, 5, 10);
            g.DrawEllipse(p, w / 3 + 105, h / 3 + 10, 5, 10);
            if (btnsadsmile.Text == "smile")
                g.DrawArc(p, w / 3 + 67, h / 3 + 50, 20, 10, 0, 180);
            else
                g.DrawArc(p, w / 3 + 67, h / 3 + 50, 20, 10, -180, 180);
        }

        private void btnsadsmile_Click(object sender, EventArgs e)
        {
            Invalidate();
            btnsadsmile.Text = "smile";
            
        }

    }

1 Ответов

Рейтинг:
0

OriginalGriff

Есть несколько способов сделать это.
Самое простое-создать уровень класса, private bool называется showHappy, который по умолчанию имеет значение true Каждый раз, когда вы нажимаете кнопку, вы проверяете bool, рисуете изображение, а затем меняете текст и bool. (Вы можете исключить это и проверить текст напрямую, но это не очень хорошая идея в реальном мире: разделение проблем здесь полезно.

Более сложным (но в целом лучшим) решением было бы сохранить значение bool в кнопке.Тег свойства и доступ к нему через sender параметр обработчика событий Click:

private void MyButton_Click(object sender, EventArgs e)
    {
    Button b = sender as Button;
    if (b != null)
        {
        bool showHappy = (bool)b.Tag;
        ...
        b.Tag = !showHappy;
        }
    }
Таким образом, вы можете иметь несколько кнопок и несколько условий рисования, если они вам нужны.