CSharp - 正在将textbox字符串获取到具有验证 0的属性中

  显示原文与译文双语对照的内容
0 0

我是 C#/Visual Studio的新手,在这里需要一个正确的方向。

在这个文件中有一个 TextBox,其中包含一个名字,还有两个按钮,用来更新一个名为Student的类,用来更新一个名为Student的类,它是一个正常运行的"清除"按钮。

我无法找到如何将字符串从文本框中获取到学生类中,然后在添加更多属性之前得到。

将感激地收到任何帮助。

主窗口代码如下


public partial class MainWindow : Window
{
 public MainWindow()
 {
 InitializeComponent();
 }

 private void btnSet_Click(object sender, RoutedEventArgs e)
 {

 }

 private void btnClear_Click(object sender, RoutedEventArgs e)
 {
 txtFirstName.Clear();

 }

我的学生类代码如下


namespace StudentRecordsSystem
{
public class Student
{
 private string FirstName
 {
 get
 {
 throw new System.NotImplementedException();
 }
 set
 {
//check that string is not empty

 if (string.IsNullOrEmpty(value) == true)
 throw new ArgumentOutOfRangeException("Please enter a first name");
 }
 }

时间: 原作者:

0 0

你应该将名字属性设置为 public,不需要将它的设为 private 。

你需要实例化student类,然后将textbox的值赋给属性。


private Student s;
public MainWindow()
{
 InitializeComponent();
 s = new Student()
}
private void btnSet_Click(object sender, RoutedEventArgs e) {
 s.FirstName = txtFirstName.Text;
}

如果注意到无法从窗体代码访问Student类,请检查命名空间。

原作者:
0 0

如果你想为student类创建一个构造函数,就像这样:


public Student(string firstName)
{
 FirstName = firstName;
}

这将允许你执行如下操作:

学生= new Student("Josh") ;

注意,这里方法声明中的名称有较小的大小写F,而变量( 至少在我的使用中)的大小写为,。 这不是常规,我相信约定是使用 camelcase,但是在 private 变量前面放置下划线( _ ) 。 这主要是一个 C++ 约定,但是 C# 设计为类似于 C++,它适合于工作。

原作者:
0 0

MainWindow应该如下所示:


public partial class MainWindow : Window
{
 private Student myOnlyStudent;
 public MainWindow()
 {
 InitializeComponent();
 myOnlyStudent = new Student()
 }

 private void btnSet_Click(object sender, RoutedEventArgs e)
 {
 myOnlyStudent.FirstName = txtFirstName.Text;
 }

 private void btnClear_Click(object sender, RoutedEventArgs e)
 {
 txtFirstName.Clear();
 }
}

如果你坚持使用带有异常的属性,则Student类必须如下所示:


public class Student
{
 private string mFirstName;
 public string FirstName
 {
 get
 {
 return mFirstName;
 }
 set
 {
 if (string.IsNullOrEmpty(value) == true)
 throw new ArgumentOutOfRangeException("Please enter a first name");
 mFirstName = value;
 }
 }
}

但是对于你级别的初学者,我建议你使用 public 代替 private,并跳过属性( 可见性和属性都很复杂):


public class Student { public string FirstName; }

public partial class MainWindow : Window
{
 private void btnSet_Click(object sender, RoutedEventArgs e)
 {
 if (string.isNullOrEmpty(txtFirstName.Text))
 throw new Exception("Please type first name!");
 myOnlyStudent.FirstName = txtFirstName.Text;
 }
}

0 0

尝试这个:

在 xaml.cs 中:

注意如何创建DataContext并将它的用于检索数据。


public MainWindow()
{
 InitializeComponent();
 DataContext = new Student();
}
private void Clear_Clicked(object sender, RoutedEventArgs e)
{
 ((Student)DataContext).FirstName = string.Empty;
}

将此类添加到与MainWindow相同的项目中:

使用ValidationRule的目的是避免恼人的messageBox,而在违反规则时标记它的控制。


public class NamesValidationRule : ValidationRule
{
 public string MinimumLetters { get; set; }

 public override ValidationResult Validate(object value, CultureInfo cultureInfo)
 {
 var str = value as string;
 if(str == null)
 return new ValidationResult(false,"Please enter first name");
 if(str.Length <Convert.ToInt32(MinimumLetters))
 return new ValidationResult(false, string.Format("Minimum Letters should be {0}", MinimumLetters));
 return new ValidationResult(true, null); 
 }
}

在XAML中:

将xmlns添加到第一个xaml中,然后使用绑定从/到FirstName读取/写入数据。 还注意到添加到绑定的有效性规则。

注意:窗口中的所有绑定都是相对于它的DataContext的,除非它是手动更改的。 ( 当你编写 {Binding FirstName} 时,它表示 DataContext.FirstName )


<MainWindow xmlns:local="clr-namespace:MyNamespace.Project1"
. . .>
. . .
 <TextBox>
 <TextBox.Text>
 <Binding Path="FirstName" UpdateSourceTrigger="PropertyChanged">
 <Binding.ValidationRules>
 <local:NamesValidationRule MinimumLetters="3"/>
 </Binding.ValidationRules>
 </Binding>
 </TextBox.Text>
 </TextBox>
. . .
 <Button Content="Clear" Click="Clear_Clicked"/>
. . .
</MainWindow>

在StudentRecordsSystem中:

注意:不要忘记使用dependencyProperty而不是普通属性,否则绑定将无法工作。 并且不要忘记从DependencyObject派生类( 学生)


 using System.Windows;
.. .
 public class Student : DependencyObject
 {
//FirstName Dependency Property
 public string FirstName
 {
 get { return (string)GetValue(FirstNameProperty); }
 set { SetValue(FirstNameProperty, value); }
 }
 public static readonly DependencyProperty FirstNameProperty =
 DependencyProperty.Register("FirstName", typeof(string), typeof(Student), new UIPropertyMetadata(null));
 }

你就不再需要'集合集'按钮了

原作者:
...