Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Использование object

#c_sharp #объекты


Есть метод обработки события 

private void BillsPanel_MouseDown(object sender, MouseEventArgs e)
{
    billsPanel.Cursor = Cursors.SizeAll;
    mouse_offset = new Point(-e.X, -e.Y);
}


В дальнейшем мне надо будет использовать тот же метод для другий объектов. Могу ли
я как-то использовать object sender. Чтобы писать sender.Cursor Если да, то каким именно
образом?



UPD: Возникла новая задача. Надо было методы для передвижения элементов - панелей
и формы. С панелями разобрался, а с формой творятся чудеса - она ужасно прыгает помимо
того, что стоит if, в котором координаты не отнимаются.

private void Panel_MouseMove(object sender, MouseEventArgs e)
    {
        var obj = sender as Control;
        if (sender is Form)
            obj = sender as Form;
        else if (sender is Control)
            obj = sender as Control;

        if ((sender is Control) && (e.Button == MouseButtons.Left))
        {
            Point mousePos = MousePosition;
            mousePos.Offset(mouse_offset.X - this.Location.X,
                mouse_offset.Y - this.Location.Y);
            obj.Location = mousePos;
        } else if((sender is Form) && (e.Button == MouseButtons.Left))
        {
            Point mousePos = MousePosition;
            mousePos.Offset(mouse_offset.X, mouse_offset.Y); 
            obj.Location = mousePos;
        }

    


Ответы

Ответ 1



private void BillsPanel_MouseDown(object sender, MouseEventArgs e) { if (sender is Control) { Control control = (Control)sender; control.Cursor = Cursors.SizeAll; } mouse_offset = new Point(-e.X, -e.Y); }

Ответ 2



Приведите ваш объект к нужному типу и используйте: var obj = sender as Panel; "Но есть нюанс" функцию можно будет использовать только для объектов этого типа. Поэтому есть смысл подъняться по "дереву предков" до первого имеющего нужное вам свойство или функцию.

Комментариев нет:

Отправить комментарий