Есть ли способ «сгруппировать» Rectangle, Eliipse, Text и т. Д., Чтобы использовать их вместе - PullRequest
0 голосов
/ 09 июня 2019

Я создаю графический редактор, такой как Inkscape.На данный момент я использую определенные «проверки» (как показано вниз) для каждого инструмента, это означает, что я должен написать весь код дважды или более (как показано ниже).

Я как-то хочу сделать это только для одного инструмента, а затем использовать его.Возможно ли это?

public void ChangeGraphicsValues()
{

    if (activeTool == Tools.Rectangle)
    {
        for (int i = 0; i < rect.Count; i++)
        {
            #region Width
            if (objectWidthBox.Text != "")
            {
                rect[i].Width = Convert.ToDouble(objectWidthBox.Text);
            }
            else
            if (objectWidthBox.Text == "")
            {
                objectWidthBox.Text = "0";
            }
            #endregion

            #region Heigth
            if (objectHeightBox.Text != "")
            {
                rect[i].Height = Convert.ToDouble(objectHeightBox.Text);
            }
            else
            if (objectHeightBox.Text == "")
            {
                objectHeightBox.Text = "0";
            }
            #endregion
        }
        else
        if (activeTool == Tools.Text)
        {
            for (int i = 0; i < txt.Count; i++)
            {
                #region Width
                if (objectWidthBox.Text != "")
                {
                    txt[i].Width = Convert.ToDouble(objectWidthBox.Text);
                }
                else
            if (objectWidthBox.Text == "")
                {
                    objectWidthBox.Text = "0";
                }
                #endregion

                #region Heigth
                if (objectHeightBox.Text != "")
                {
                    txt[i].Height = Convert.ToDouble(objectHeightBox.Text);
                }
                else
                if (objectHeightBox.Text == "")
                {
                    objectHeightBox.Text = "0";
                }
                #endregion
               //some other things - rotation,...
            }
        }
    }

rect - это список прямоугольников из графики, txt - это список текстовых полей.Эти инструменты предназначены для создания некоторой графики, как в Inscape.

Я хочу, чтобы они были создаваемыми, изменяемыми (редактируемыми), разрушаемыми.Я могу сказать, что у меня есть все, но я хочу, чтобы они были доступны вместе, например obj.Height вместо rect.Height и txt.Height или сократить мой код

1 Ответ

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

Rectangle и TextBox являются производными от базового класса FrameworkElement.Свойства ширины и высоты объявлены в FrameworkElement.Таким образом, вы можете извлечь весь дублирующий код в метод:

private void UpdateFigure(FrameworkElement figure)
{
    figure.Width = Convert.ToDouble(objectWidthBox.Text);
    figure.Height = Convert.ToDouble(objectHeightBox.Text);
}

public void ChangeGraphicsValues()
{
    // validate input values before using them
    if (objectWidthBox.Text == "")
    {
        objectWidthBox.Text = "0";
    }

    if (objectHeightBox.Text == "")
    {
        objectHeightBox.Text = "0";
    }

    if (activeTool == Tools.Rectangle)
    {
        for (int i = 0; i < rect.Count; i++)
        {
            UpdateFigure(rect[i]);
        }
    }
    else if (activeTool == Tools.Text)
    {
        for (int i = 0; i < txt.Count; i++)
        {
            UpdateFigure(txt[i]);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...