2015-09-14 18 views
6

Tôi đang cố gắng lấy đầu vào của người dùng từ hộp văn bản trong một ứng dụng WPF mà tôi đang xây dựng. Người dùng sẽ nhập một giá trị số và tôi muốn lưu trữ nó trong một biến. Tôi chỉ mới bắt đầu với C#. Vì vậy, bất kỳ ý tưởng về làm thế nào để làm điều đó?Nhận đầu vào của người dùng từ hộp văn bản trong ứng dụng WPF

Hiện tại tôi đang mở hộp văn bản và cho phép người dùng nhập giá trị. Sau đó người dùng phải nhấn một nút mà văn bản từ textbbox được lưu trữ trong một biến.

private void TextBox_TextChanged(object sender, TextChangedEventArgs e) 
{ 
} 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var h = text1.Text; 
} 

Tôi biết điều này là không đúng. Có ai có ý tưởng gì không?

+0

bạn đang cố gắng để chuyển đổi các đầu vào cho một số? –

+1

@crossemup Nếu bạn muốn lưu trữ giá trị được lưu trữ trong một biến sau khi nhấp vào nút. Bạn đang làm điều đó một cách chính xác ... Tại sao bạn cảm thấy như thế này là không chính xác? –

+0

Không, tôi không cố gắng chuyển đổi đầu vào thành một số. Bản thân đầu vào là một số. Tôi đang tìm cách lưu số đó vào một biến số – crossemup

Trả lời

13

Giống như @ Michael McMullin đã nói, bạn cần phải xác định các biến bên ngoài chức năng của bạn như thế này:

string str; 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    str = text1.Text; 
} 

// somewhere ... 
DoSomething(str); 

Vấn đề là: khả năng hiển thị của biến phụ thuộc vào phạm vi của nó. Vui lòng xem this explanation.

+1

... bởi vì bên trong trình xử lý sự kiện biến cục bộ biến mất ... [ít nhất là kết thúc câu trả lời để OP biết tại sao phương pháp hiện tại không hoạt động] ... – slugster

+0

'var h;' sẽ không hoạt động. ['var' (C# Reference)] (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/var) chỉ có thể được sử dụng ở phạm vi phương thức. –

+0

@Olivier Jacot-Descombes Bạn nói đúng, tôi đã chỉnh sửa. – duDE

0
// WPF 

// Data 
int number; 

// Button click event 
private void Button_Click(object sender, RoutedEventArgs e) { 
    // Try to parse number 
    bool isNumber = int.TryParse(text1.Text, out number); 
} 
4

Vâng, đây là ví dụ đơn giản về cách thực hiện điều này với MVVM.

Thứ nhất viết một cái nhìn mô hình:

public class SimpleViewModel : INotifyPropertyChanged 
{ 
    private int myValue = 0; 

    public int MyValue 
    { 
     get 
     { 
      return this.myValue; 
     } 
     set 
     { 
      this.myValue = value; 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

Sau đó viết một bộ chuyển đổi, vì vậy bạn có thể dịch chuỗi của bạn để int và ngược lại

[ValueConversion(typeof(int), typeof(string))] 
class SimpleConverter:IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value.ToString(); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     int returnedValue; 

     if (int.TryParse((string)value, out returnedValue)) 
     { 
      return returnedValue; 
     } 

     throw new Exception("The text is not a number"); 

    } 
} 

Sau đó viết mã XAML của bạn như thế này:

<Window x:Class="StackoverflowHelpWPF5.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:[YOURNAMESPACEHERE]" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.DataContext> 
    <local:SimpleViewModel></local:SimpleViewModel> 
</Window.DataContext> 
<Window.Resources> 
    <local:SimpleConverter x:Key="myConverter"></local:SimpleConverter> 
</Window.Resources> 
<Grid> 
    <TextBox Text="{Binding MyValue, Converter={StaticResource myConverter}, UpdateSourceTrigger=PropertyChanged}"></TextBox> 
</Grid> 

+0

Tôi đang cố gắng làm cho một cái gì đó đơn giản: khi bạn nhấn nút, nó sẽ hiển thị một hộp thông báo cho bạn biết văn bản bên trong hộp văn bản. Tôi có cần phải làm tất cả những điều này chỉ để lấy văn bản bên trong hộp văn bản không? Tôi không thể truy cập trực tiếp vào hộp văn bản và gọi getText() hay gì đó? – alxcyl

+0

Wow, đây là rất nhiều mã cho một cái gì đó thật trần tục. Và mọi người tự hỏi tại sao tôi ghét MVVM/MVC ....Tuy nhiên, trình bày tuyệt vời. – vapcguy

2

bạn cũng có thể chỉ cần cung cấp một tên để kiểm soát của bạn

<TextBox Height="251" ... Name="Content" /> 

và trong mã

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     string content = Content.Text; 
    } 
Các vấn đề liên quan