0

私はテキストブロックといくつかのボタンを持っています。私がしたいのは、テキストブロックの最後の文字が ^ であるかどうかを確認することです。そうであれば、次のすべての数字を上付き文字にしたいです

これが私がしたことです

  private void buttonxn_Click(object sender, RoutedEventArgs e)
  {
      textBlock1.Text = textBlock1.Text + "x^";

  }

  private void button1_Click(object sender, RoutedEventArgs e)
  {
      int len=textBlock1.Text.Length;
      string x = textBlock1.Text.Substring(len-1, 1);
      if(x=="^")
      {
          textBlock1.Text = textBlock1.Text + "\x2070";
      }

      else
          textBlock1.Text = textBlock1.Text + "1";
  }

しかし、これは、べき乗が1桁の場合にのみ役立ちますx ^ 12などに適用する方法など、文字列を作成してチェックしようとしていた

     string power ={ "\x2070", "\x00b9", "\x00b2", "\x00b3", "\x2074", "\x2075", "\x2076", "\x2077", "\x2078", "\x2079" };

今、すべてのボタンのクリックイベントで、最後の文字が「パワー」になっている間にチェックできるので、次に押された数字のボタンも、+、-などの他のキーが押されるまでパワーになります....私が自分で作ったことを願っていますクリア....私がかなり新しいものではない場合は申し訳ありません

4

1 に答える 1

1

必要なのは、現在のアプリケーションの状態を UI から分離することです。このコードは単純化された例ですが、これを行うパターン (MVC、MVP、MVVM) を調べることをお勧めします。これらのパターンを使用することは、ほとんどの場合、非常に小さなアプリケーションではやり過ぎですが、そこから学べることは非常に優れています。基本的に、他のボタンの動作に影響を与える場合は、特定のボタンの状態を切り替えたいと考えています。この例では、+/-... ボタンがデフォルトに戻ります。

        public enum EntryState
        {
            Default,
            Power
        }

        private EntryState _state = EntryState.Default;

        private void buttonxn_Click(object sender, RoutedEventArgs e)
        {
            textBlock1.Text = textBlock1.Text + "x^";
            _state = EntryState.Power;
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            if (_state == EntryState.Power)
                textBlock1.Text = textBlock1.Text + "\x2070";
            else
                textBlock1.Text = textBlock1.Text + "1";
        }
于 2012-10-01T10:15:57.477 に答える