C # WPF Флажок с нулевым значением? - PullRequest
0 голосов
/ 22 марта 2019

В настоящее время я создаю графический интерфейс в WPF и работаю над страницей, предназначенной для создания и настройки комнат сообщений, но следующий код ниже

else if (Password_Enabled.IsChecked == true && Password.Text.Length == 0)
        {
            return false; 
        }

появляется с ошибкой

Password_Enabled.IsChecked «Password_Enabled.IsChecked» вызвал исключение типа «System.NullReferenceException»

Мой Xaml для CheckBox выглядит следующим образом

<CheckBox x:Name="Password_Enabled" IsChecked="False" Content="Password Enabled" HorizontalAlignment="Left" VerticalAlignment="Top" Checked="Password_Enabled_Checked" Unchecked="Password_Disabled_Checked" Margin="10,5,0,0" Grid.RowSpan="2"/>

Я искал в Интернете, но с ошибкамикак они стандартизированы, я знаю, это означает, что флажок обрабатывается как ноль.Но, хотя поиск по моему коду не нашел ничего, объясняющего, почему, любая помощь по этому вопросу будет высоко оценена, спасибо.

Редактировать

Мой полный код для страницы C # равен

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ChatRoom
{
   /// <summary>
   /// Interaction logic for New_Server.xaml
   /// </summary>
 public partial class New_Server : Page
{
    public New_Server()
    {
        InitializeComponent();
        Owner.Text = Global_Class.GetUsername(Environment.UserName);
    }
    public static string ChosenAddress = "";

    private bool CheckValidCredentials()
    {
        List<string> IllegalCharacters = new List<string>() { ",", "|", "\\", "/", ".", "?", "\"", "<", ">", ":" };
        bool Illegal = false;
        if (ServerName.Text.Length == 0)
        {
            return false;
        }
        foreach (string Check in IllegalCharacters)
        {
            if (ServerName.Text.Contains(Check))
            {
                Illegal = true;
                break;
            }
        }
        if (Illegal)
        {
            return false;
        }
        else if (Password_Enabled.IsChecked == true && Password.Text.Length == 0)
        {
            return false; 
        }
        else if (ChosenAddress == "")
        {
            return false; 
        }
        else
        {
            return true; 
        }
    }
    public void SetMakeServer()
    {
        if (CheckValidCredentials())
        {
            MakeServer.IsEnabled = true;
        }
        else
        {
            MakeServer.IsEnabled = false;
        }
    }
    private void Public_Server_Checked(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("This Server Will Be Open to everyone in the College, Please Untick if you wish to change this.");
        CheckValidCredentials();
    }
    private void Password_Enabled_Checked(object sender, RoutedEventArgs e)
    {
        Password.IsEnabled = true;
        OneTimePass.IsEnabled = true;
        SetMakeServer();
    }
    private void Password_Disabled_Checked(object sender, RoutedEventArgs e)
    {
        Password.IsEnabled = false;
        OneTimePass.IsEnabled = false;
        SetMakeServer();
    }

    private void Back_Click(object sender, RoutedEventArgs e)
    {
        this.NavigationService.Navigate(new Server_Selection());
    }

    private void ServerDirectorySet_Click(object sender, RoutedEventArgs e)
    {
        using (var fbd = new System.Windows.Forms.FolderBrowserDialog())
        {
            System.Windows.Forms.DialogResult result = fbd.ShowDialog();
            if (result == System.Windows.Forms.DialogResult.OK)
            {
                ChosenAddress = fbd.SelectedPath;
                ServerDirectoryDisplay.Content = "Location: " + ChosenAddress;
            }
            else
            {
                ChosenAddress = "";
                SetMakeServer();
            }
        }
    }

    private void ServerName_TextChanged(object sender, TextChangedEventArgs e)
    {
        SetMakeServer();
    }

    private void Password_TextChanged(object sender, TextChangedEventArgs e)
    {
        SetMakeServer();
    }
}

}

1 Ответ

1 голос
/ 22 марта 2019

InitializeComponent должен завершиться, прежде чем вы будете взаимодействовать с чем-либо в пользовательском интерфейсе. Если вы попытаетесь получить доступ к визуальным элементам в вашем коде до того, как WPF завершит их инициализацию, вы получите пустые ошибки.

...