Как создать события и изменить свойства на пользовательских элементов управления, которые были переопределены? - PullRequest
0 голосов
/ 13 июня 2019

Моя цель - создать 2 элемента управления Numeric Up Down для сохранения счета в теннисе.Поэтому я должен переопределить класс элемента управления Numeric Up Down, НО я не уверен, как создавать события или ссылаться на свойства этих пользовательских элементов управления из событий других элементов управления.

Я создал 2 пользовательских элемента управления этим методом(https://stackoverflow.com/a/5921599/10886205),, что позволило мне перейти с 0, 15, 30 на 40 и поместить в него текстовые значения после того, как оно превысило 40.

Однако элемент управления не существует в интерфейсе дизайнераVisual Studio, поэтому (потому что я вроде «программист-любитель»), я понятия не имею, как создать событие, например ValueUp, ValueDown, ValueChanged, ИЛИ как изменить какое-либо из свойств элемента управления, например Value или Text.из любого другого события, за исключением использования ключевого слова «this» в событиях переопределения, однако это не помогает мне программно связать элементы управления, так что, когда 1 игрок находится в «Adv», другой игрок находится в «- «, или когда один игрок сравняется с« Двойкой », тогда другой игрок также находится в« Двойке »(я пытался использовать Теги и переменнуюs, но я думаю, что это тупик.)

public partial class Form1 : Form
{


    public class NumericUpDownEx : NumericUpDown
    {
        string tennisAdv = "none";
        string whichNumUpDown = "unknown";

        public NumericUpDownEx()
        {

        }

        public override void UpButton()
        {
            if (Value == 0)
                Value = 15;
            else if (Value == 15)
                Value = 30;
            else if (Value == 30)
                Value = 40;
            else
                base.UpButton();
        }

        public override void DownButton()
        {
            if (Value == 40)
                Value = 30;
            else if (Value == 30)
                Value = 15;
            else if (Value == 15)
                Value = 0;
            else
                base.DownButton();
        }

        protected override void UpdateEditText()
        {
    if (Value > 40 & Value % 2 == 0)
            {
                this.Text = "Deuce";

            }
            else if (Value > 40 & Value % 2 != 0)
            {
                this.Text = "Adv";
            }
            else
            {
                this.Text = this.Value.ToString();
            }

        }

      }

    public Form1()
    {
        //create a custom UpDown for Tennis Points
        //Tennis Away Points
        NumericUpDown mynumTennisAwayScorePoints = new NumericUpDownEx
        {
            Location = new Point(249, 33),
            Size = new Size(52, 20),
            Minimum = 0,
            Maximum = 1000
        };

        //Tennis Home POints
        NumericUpDown mynumTennisHomeScorePoints = new NumericUpDownEx
        {
            Location = new Point(249, 32),
            Size = new Size(52, 20),
            Minimum = 0,
            Maximum = 1000
        };

        //create all other standard componets for the form
        InitializeComponent();

        //place the two custom UpDowns 
        ((System.ComponentModel.ISupportInitialize)(mynumTennisAwayScorePoints)).BeginInit();
        ((System.ComponentModel.ISupportInitialize)(mynumTennisHomeScorePoints)).BeginInit();

        panel19.Controls.Add(mynumTennisAwayScorePoints);
        mynumTennisAwayScorePoints.Tag = "away";
        panel20.Controls.Add(mynumTennisHomeScorePoints);
        mynumTennisHomeScorePoints.Tag = "home";
    }
}

На данный момент у меня есть 2 пользовательских элемента управления, которые дают значения (0, 15, 30, 40, Adv, Deuce, Adv, Deuceи т. д.) в таком порядке, но я как бы там застрял.

1 Ответ

0 голосов
/ 13 июня 2019

Поместите свой код в его собственный файл (не встроенный в существующий код формы). Нажмите «Проект» -> «Добавить класс» -> введите «NumericUpDownEx» -> «Добавить». Добавьте строку using System.Windows.Forms; в верхней части класса, чтобы он знал, как наследовать от обычного NumericUpDown. Затем переместите весь код, связанный с NumericUpDownEx, чтобы он выглядел так, как показано ниже (конечно, ваше пространство имен будет другим):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CS_Scratch_WindowsFormsApp1
{

    public class NumericUpDownEx : NumericUpDown
    {
        string tennisAdv = "none";
        string whichNumUpDown = "unknown";

        public NumericUpDownEx()
        {

        }

        public override void UpButton()
        {
            if (Value == 0)
                Value = 15;
            else if (Value == 15)
                Value = 30;
            else if (Value == 30)
                Value = 40;
            else
                base.UpButton();
        }

        public override void DownButton()
        {
            if (Value == 40)
                Value = 30;
            else if (Value == 30)
                Value = 15;
            else if (Value == 15)
                Value = 0;
            else
                base.DownButton();
        }

        protected override void UpdateEditText()
        {
            if (Value > 40 & Value % 2 == 0)
            {
                this.Text = "Deuce";

            }
            else if (Value > 40 & Value % 2 != 0)
            {
                this.Text = "Adv";
            }
            else
            {
                this.Text = this.Value.ToString();
            }

        }

    }

}

Теперь, после перестройки, вы должны получить новый раздел вверху вашего ToolBox с новым элементом управления в нем:

enter image description here

Таким образом, вместо создания экземпляров с помощью кода, вы можете поместить их в форму, как и другие элементы управления, и работать с их свойствами и / или событиями так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...