Как я могу продолжить добавление целого числа со свободным текстовым полем ответа? - PullRequest
1 голос
/ 31 марта 2020

Я работаю с c#. Моя цель - добавить целое число в текстовое поле для свободного ответа. Позвольте мне объяснить. У меня есть текстовое поле под названием (красный, зеленый, синий). Каждый цвет будет заменен с помощью Replace (); метод. Вот так:

 private void RedTextBox_TextChanged(object sender, EventArgs e)  //ActualFogColor is Result
    {

        string ActualColorFog = "game.Lighting.FogColor = Color3.new(Red,Green,Blue)";
        string Red = RedTextBox.Text;
        string FogColorRed = ActualColorFog.Replace("Red", Red);
        ActualColorFogScript.Text = FogColorRed;
}

Это повторяется для всех остальных цветов и работает нормально. У меня проблема в том, что у меня есть кнопка яркости, которая при нажатии на нее добавляет 1 к введенному числу, но, конечно, мне пришлось преобразовать ее в целое число. Это в основном начальный + 1 = новый цвет. Замените Initial на новый цвет и напечатайте его в текстовом поле.

К сожалению, я не могу сделать

 public partial class main : Form
{
    int red = Convert.ToInt32(RedTextbox.Text); }

Это в самом верху кода, поэтому при этом он не распознает RedTextBox. Причина, по которой я пытаюсь присвоить целое число текстовому полю, заключается в том, что, когда «RedTextBox.Text = '5'», потребуется 5 и добавится 1 (с помощью кнопки), что затем выведет сумму, которую я установил равной Red в string ActualColorFog = "game.Lighting.FogColor = Color3.new(Red,Green,Blue)";

Я надеюсь, что это имеет смысл для всех вас, если вы не уверены в моем плане, пожалуйста, оставьте свой вопрос.

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Я не буду вдаваться в это, если ваш метод хорош или нет, но просто как решить эту проблему.

Как я вижу, для вас было бы идеально, если бы вы могли назначить int red = Convert.ToInt32(RedTextbox.Text);, а вы не можете потому что он находится на вершине вашего кода?

Он не распознает, потому что эта часть кода доступна еще до инициализации RedTextBox. Решение для этого состоит в том, чтобы поставить int red = -1;, а затем

public main() //Your form constructor
{
    InitializeComponents();

    // I guess you somehow add some value to RedTextbox on form
             showing so it need to be before assigning red variable

    red = Convert.ToInt32(RedTextbox.Text); //It is important to be after Initializecomponents()
}
0 голосов
/ 31 марта 2020

Я бы посоветовал вам сделать шаг назад и подумать о удобстве использования ваших входных данных. Что я имею в виду, если вы разрешаете пользователю свободно вводить текст, вы должны обрабатывать входные значения, такие как отрицательные числа, литералы, числа вне диапазона (я полагаю, 0-255), нецелочисленный ввод и т. Д. c. Кроме того, было бы хорошо, если бы пользователь мог использовать прокрутку мыши для увеличения / уменьшения значения. Возможно, цифра c вверх-вниз будет решением вашей проблемы? Это не стандартный элемент управления, но его реализации доступны достаточно.

Если вы настаиваете на использовании текстового ввода, сделайте следующее:

  • определите 3 целочисленных переменных-члена в вашем код для компонентов.
  • предоставляет обработчик события Changed для каждого текстового поля, в которое вы вводите int.TyParse, проверяете диапазоны и, если все идет хорошо, и обновляете соответствующую переменную-член, если она отличается от нового значения
  • возможно, добавит обработчик события прокрутки мыши
  • Обработчик события Click вашей кнопки обновит переменные-члены и текстовые значения в текстовых полях

Лучшее решение будет использование свойств зависимости вместо переменных-членов, содержимое текстовых полей привязывается к переменным зависимости одним способом, а обработчик событий Checked текстовых полей выполняет синтаксический анализ.

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