Метод не передает результат обратно в основную программу - PullRequest
0 голосов
/ 18 июня 2020

У меня серьезные проблемы с пониманием того, где я ошибся. Я отметил в коде, что и где. Я использую интерфейс XAML, и здесь есть объекты для всего. Код компилируется, но TextBlock не обновляется с результатом обновления VTCShortCode Спасибо за помощь!

ОСНОВНАЯ ПРОГРАММА

namespace VTCPT
{
    /// <summary>
    /// 
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();


        }

public void shortFormCodec_SelectionChanged(object sender, RoutedEventArgs e)
        {
            //UPDATE THE SHORTCODE TEXTBLOCK
            updateVTCShortCode display = new updateVTCShortCode();
            display.mergeShortCode(longFormCodec.SelectedItem.ToString());
            if (String.IsNullOrEmpty(display.finalResult()))
            { shortFormCodec.Text = ".."; }
            else { shortFormCodec.Text = display.finalResult();
                shortFormCodec.Text = "test";
            }  /////THIS IS NOT ACTUALLY GETTING A RETURN 
        }

        public void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }


        private void updateShortForm(object sender, SelectionChangedEventArgs e)
        {

        }


        private void TextBlock_SelectionChanged(object sender, RoutedEventArgs e)
        {


        }

        private void fsSiteBuild_SelectionChanged(object sender, RoutedEventArgs e)
        {
        }


        private void updateSiteBuild(object sender, TextChangedEventArgs e)
        {
            int index = fsRoomDesig.Text.IndexOf(".");

            if (index > 0)
            { fsSiteBuild.Text = fsRoomDesig.Text.Substring(0, index); }
            else { fsSiteBuild.Text = ".."; }
        }

        private void vtcSystemName_SelectionChanged(object sender, RoutedEventArgs e)
        {

        }
    }
}

updateVTCShortCode CLASS

namespace VTCPT
{
    class updateVTCShortCode
    {
        String result = "";
        public void mergeShortCode(String longFormCodec)
    {      if (longFormCodec.Equals("Cisco SX80"))
            {
                String sendShortForm = "SX80";
                result = "V-T" + sendShortForm;

            }
            if (longFormCodec.Equals("Cisco Webex Codec Plus"))
            {
                String sendShortForm = "SRK";
                result = "V-T" + sendShortForm;
            }
            if (longFormCodec.Equals("Cisco Webex Codec Pro"))
            {
                String sendShortForm = "SRK";
                result = "V-T" + sendShortForm;
            }
 }
        public String finalResult()
                 { return result; } //////SHOULD BE GETTING SENT BACK TO MAIN PROGRAM
    }
}

1 Ответ

0 голосов
/ 10 августа 2020

Я думаю, проблема в том, что следующий код взят из вашего shortFormCodec_SelectionChanged метода. Вы устанавливаете shortFormCodec.Text = display.finalResult(); сразу после shortFormCodec.Text = "test";. Конечный результат никогда не будет виден, потому что он немедленно перезаписывается с помощью "test". клавиша F8), наблюдая за значениями ваших переменных и текстовых полей. Если вы наведете указатель мыши на переменные и раздел .Text любой строки shortFormCodec.Text, он покажет вам его значение в этой точке программы.

Однако я думаю, вы можете найти это полезным, если вы настройте свой код, чтобы использовать структуру if {} else if {} else {}. Я бы также изменил метод finalResult() на свойство, поскольку он ничего не делает, кроме как возвращает строку. Например:

class updateVTCShortCode
{
    // You could set the default value to an empty string I.e. = ""
    // but having it set to "Not set" may help you spot any problems for now.
    // As long as you remember to call mergeShortCode() first, you would never
    // see "Not set" returned anyway. But this would help you spot that mistake.
    public string FinalResult { get; set; } = "Not set";

    public void mergeShortCode(String longFormCodec)
    {
        if (longFormCodec.Equals("Cisco SX80"))
        {
            String sendShortForm = "SX80";
            FinalResult = "V-T" + sendShortForm;

        } 
        else if (longFormCodec.Equals("Cisco Webex Codec Plus"))
        {
            String sendShortForm = "SRK";
            FinalResult = "V-T" + sendShortForm;
        }
        else if (longFormCodec.Equals("Cisco Webex Codec Pro"))
        {
            String sendShortForm = "SRK";
            FinalResult = "V-T" + sendShortForm;
        } else
        {
            // If longFormCodec is not matched, set the result to ".."
            FinalResult = "..";
        }
    }

Установив конечный результат на «..» в блоке else метода mergeShortCode() и установив значение по умолчанию для свойства FinalResult (даже если это пустая строка Ie ""). Вы предотвращаете, чтобы FinalResult когда-либо был null и предоставлял все возможные результаты из одной функции. Это означает, что вы можете упростить метод shortFormCodec_SelectionChanged() до следующего и легко повторно использовать метод mergeShortCode() в другом месте:

    public void shortFormCodec_SelectionChanged(object sender, RoutedEventArgs e)
    {
        //UPDATE THE SHORTCODE TEXTBLOCK
        updateVTCShortCode display = new updateVTCShortCode();
        display.mergeShortCode(longFormCodec.SelectedItem.ToString());
        shortFormCodec.Text = display.FinalResult;
    }

}
...