【问题标题】:Trouble with text and linecount from textblock in wpfwpf中文本块中的文本和行数问题
【发布时间】:2013-10-04 17:29:24
【问题描述】:

在我的代码中,当我单击提交按钮时,我试图从选项窗口中的文本框中获取一个值。我知道我需要将字符串转换为我已经完成的双精度,但我的问题是 distanceOption 只是设置为 0.0 而不是用户放入文本框中的值。我认为我的问题可能与文本框的行数有关。我的 linecount 变量一直显示为 -1 并且不确定是否应该是这个值。

        void Options_Clicked(object sender, RoutedEventArgs e)
    {
        OptionsWindow optionsWindow = new OptionsWindow();
        optionsWindow.Show();
        optionsWindow.DistanceButton.Click += new RoutedEventHandler(Distance_Clicked);
    }
    void Distance_Clicked(object sender, RoutedEventArgs e)
    {
        OptionsWindow optionsWindow = new OptionsWindow();
                  int lineCount = optionsWindow.DistanceBox.LineCount;
                 this.distanceOption = Convert.ToDouble(optionsWindow.DistanceBox.GetLineText(lineCount));

    }

如果有更好的方法从文本框中获取值,我也会对此持开放态度。谢谢!

【问题讨论】:

  • 如果您在 Distance_Clicked 中创建一个新的 OptionsWindow,我猜 DistanceBox.LineCount 将是默认值。您需要单击 DistanceButton 的原始 OptionsWindow。
  • @LPL 好的,我明白你在说什么。您如何建议我从 Distance_clicked 函数中的 Options_Clicked 函数中获取 optionsWindow?
  • 使用 MVVM 会很容易。因此,在我看来,所有选项都像是 hack。但是您可以将OptionsWindow optionsWindow = new OptionsWindow(); 移出 Options_Clicked 处理程序,以便您也可以在 Distance_Clicked 处理程序中引用它。但是您应该在 Options_Clicked 中注册 optionsWindow.DistanceButton.Click 或在关闭 OptionsWindow 后将其删除,否则每个 Options_Click 都会获得一个处理程序i>.
  • @LPL 感谢有用的 cmets。你的 cmets 结合艾伦的回答解决了我的问题。感谢您的快速回复。

标签: c# wpf textbox event-handling line-count


【解决方案1】:

这是一个例子

public partial class MainWindow : Window
{
    NewWindow optionsWindow = new NewWindow();

    public MainWindow()
    {
        InitializeComponent();

        optionsWindow.button1.Click += new RoutedEventHandler(button1_Click);
        optionsWindow.Show();

    }

    void button1_Click(object sender, RoutedEventArgs e)
    {
        double d = Convert.ToDouble(optionsWindow.textBox1.GetLineText(0));
    }


}

【讨论】:

  • 感谢这很容易格式化并像魅力一样解决了我的问题。
【解决方案2】:

创建合适的 ViewModel 并使用 DataBinding:

XAML:

<TextBox Text="{Binding MyDouble}"/>

视图模型:

public double MyDouble {get;set;} //Probably NotifyPropertyChanged

【讨论】:

  • 所以我应该在整个程序中用 MyDouble 替换存储双精度的 distanceOption 吗?
  • @averagepainter 不,我说的是需要使用数据绑定而不是程序方法。
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多