0

コードのみの WPF アプリを作成しようとしていますが、textBox に入力すると上記のエラーが発生します。これは、すべての変数が初期化されているにもかかわらずです。

windows1.xaml は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>

<Window>

    x:Class="BlendCatalogue.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="BlendCatalogue"
    Height="300"
    Width="300">
</Window>

背後にあるコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;

namespace BlendCatalogue
{

    public partial class Window1 : Window
    {
            private TextBlock textBlock;
            private TextBox textBox;

        public Window1()
        {
            InitializeComponent();
            Initialization();
        }

        public void Initialization()
        {


            this.Width=300;
            this.Height=200;
            this.Background =Brushes.Aquamarine;
            this.Title = "Only the best!";

            Grid layoutGrid = new Grid();
            StackPanel stackpanel = new StackPanel();
            layoutGrid.Children.Add(stackpanel);
            this.AddChild(layoutGrid);

            TextBlock textBlock = new TextBlock();
            textBlock.Margin = new Thickness(6);
            textBlock.Height = 20;
            textBlock.TextAlignment = TextAlignment.Center;
            textBlock.Text = "Hello my World!";
            stackpanel.Children.Add(textBlock);


            TextBox textBox = new TextBox();
            textBox.Margin = new Thickness(5);
            textBox.Width = 150;
            textBox.TextAlignment = TextAlignment.Center;
            textBox.Text = "";
            textBox.TextChanged += OnTextChanged;
            stackpanel.Children.Add(textBox);

            Button btnColor = new Button();
            btnColor.Margin = new Thickness(5);
            btnColor.Width = 150;
            btnColor.Content = "Change Text Color";
            btnColor.Click += btnChangeColor_Click;
            stackpanel.Children.Add(btnColor);

            Button btnSize = new Button();
            btnSize.Margin = new Thickness(5);
            btnSize.Width = 150;
            btnSize.Content = "Change Text Color";
            btnSize.Click += btnChangeSize_Click;
            stackpanel.Children.Add(btnSize);
        }

        private void OnTextChanged(object sender, TextChangedEventArgs e)
        {

            textBlock.Text = textBox.Text;
        }

        private void btnChangeColor_Click(object sender, RoutedEventArgs e)
        {
            if (textBlock.Foreground == Brushes.Black)
                textBlock.Foreground = Brushes.Red;
            else
                textBlock.Foreground = Brushes.Black;
        }
        private void btnChangeSize_Click(object sender, RoutedEventArgs e)
        {
            if (textBlock.FontSize == 11)
                textBlock.FontSize = 42;
            else
                textBlock.FontSize = 11;
        }

    }
}

この初心者は、何が間違っているのかをまったく知らないので、どんな助けも本当に感謝しています. 皆さんありがとう。

4

2 に答える 2

0

いくつかの変数を 2 回宣言します。

private TextBlock textBlock;
private TextBox textBox;

TextBlock textBlock = new TextBlock();
TextBox textBox = new TextBox();

スコープが設定されているものを初期化しInitialize()ますが、イベント ハンドラーでクラス レベルの変数にアクセスします。

変化する

TextBlock textBlock = new TextBlock();
TextBox textBox = new TextBox();

textBlock = new TextBlock();
textBox = new TextBox();

次のようなコンパイラ警告が表示されるはずであることに注意してください

警告 CS0649: フィールド 'BlendCatalogue.Window1.textBlock' が割り当てられることはなく、常に既定値が null になります

コンパイラはあなたを助けようとしていました... :-)

于 2012-07-05T00:43:34.967 に答える
0

モジュールレベルのスコープとローカルスコープのTextBlock's2つと2つを作成しています。TextBox's次に、ローカル スコープで初期化して、モジュール レベル スコープで使用しようとすると、エラーが発生します。

初期化メソッドのコードを次のように変更してみてください。

textBlock = new TextBlock();
textBlock.Margin = new Thickness(6);
textBlock.Height = 20;
textBlock.TextAlignment = TextAlignment.Center;
textBlock.Text = "Hello my World!";
stackpanel.Children.Add(textBlock);


textBox = new TextBox();
textBox.Margin = new Thickness(5);
textBox.Width = 150;
textBox.TextAlignment = TextAlignment.Center;
textBox.Text = "";
textBox.TextChanged += OnTextChanged;
stackpanel.Children.Add(textBox);
于 2012-07-05T00:52:59.280 に答える