【问题标题】:Getting the values from properties in C#从 C# 中的属性中获取值
【发布时间】:2015-12-03 06:12:57
【问题描述】:

我是 C# 新手,我有以下问题:

DBOps.cs:

class DBOps()
{
internal static void Update(DataGridView dataGridView1)
        {
            if (dataGridView1.SelectedRows.Count != 0)
            {
                var user = new User();
                user.Id = (int) dataGridView1.SelectedRows[0].Cells[0].Value;
                user.Username = (string) dataGridView1.SelectedRows[0].Cells[1].Value;
                user.FirstName = (string) dataGridView1.SelectedRows[0].Cells[2].Value;
                user.LastName = (string) dataGridView1.SelectedRows[0].Cells[3].Value;
                user.Email = (string) dataGridView1.SelectedRows[0].Cells[4].Value;
                user.Password = (string) dataGridView1.SelectedRows[0].Cells[5].Value;

                var updateForm = new UpdateForm(user);
                var result = updateForm.ShowDialog();

                if (result == DialogResult.OK)
                {

                }
                else if (result == DialogResult.Cancel)
                {

                }
            }
        }
}

用户.cs:

class User
    {
        public int Id { get; set; }
        public string Username { get; set; }    
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Password { get; set; }
    }

UpdateForm.cs:

public partial class UpdateForm : Form
    {
        public UpdateForm(User user)
        {
            InitializeComponent();

            txtId.Text = user.Id.ToString();
            txtUser.Text = user.Username;
            txtFName.Text = user.FirstName;
            txtLName.Text = user.LastName;
            txtEmail.Text = user.Email;
            txtPass.Text = user.Password;
        }
//code
}

DBOps 类中的值存储正确,我已经检查过了。现在我想用 User.cs 中的值设置 UpdateForm 中的 TextBoxes。

【问题讨论】:

  • 到底是什么问题?您需要有关制作财产的帮助吗?
  • @kailanjian:我想从属性中取值。
  • 如果第一个块在方法或事件中,则user 是仅存在于那里的本地实例。
  • 你应该提供你的完整代码,不清楚你在问什么?
  • 已添加代码,希望对您有所帮助。

标签: c# winforms


【解决方案1】:

首先, 我建议你使用Convert.ToInt32()Convert.ToString() 而不是在你的问题中那样投射。

那么请检查User类的可访问性

如果您使用的是 Visual Studio,则可以通过按键盘上的 {F12} 轻松检查类定义。

如果类不在同一个项目中,请添加引用。

如果类不在同一个命名空间,请加一行using xxxxx;

如果仍然无法获取值,请将所有属性更改为 public。

最后, 我认为您可以通过输入这些代码行来获取值:

txtUserID.Text = User.Id.ToString();
txtUserName.Text = User.UserName;
txtFirstName.Text = User.FirstName;
txtLastName.Text = User.LastName;
txtEmail.Text = User.Email;
txtPassword.Text = User.Password;

顺便说一句,我不建议你在文本框中显示密码。

如果您对 C# 仍有任何疑问,请告诉我

【讨论】:

  • 对这个领域的新手的完美解释,谢谢,现在很清楚,它正在按应有的方式工作。
  • 不过,出于学习目的,您能否告诉我我的演员表和您的转换之间的用法差异?
  • 嗨@AlexandruMitu,请阅读来自stackoverflow的这篇文章:stackoverflow.com/a/1608828/2884831
  • 非常感谢@Tony Wu。
  • 属性可以使用命名空间内的类实例的内部修饰符访问(例如objUser.ID),如果它是公共的,则可以在命名空间外访问
【解决方案2】:

您只需获取对 User 类的引用,然后通过它们的属性获取器访问它们。例如:

User user = /* get reference to User */

textbox.Text = user.Username;

【讨论】:

  • 如果这么简单,我就不会问了。这给了我的 user.Username = ""。
【解决方案3】:

我不知道你想做什么,但要将一个对象传递给另一个类,你可以使用构造函数方法。

public class SecondObject
{
    public SecondObject(User theuser)
    {
        textbox1.Text = theuser.Id
        textbox2.text = theuser.Username
        // ...
    }
}

要使用你的第二课,只需这样做:

var user = new User();

user.Id = (int) dataGridView1.SelectedRows[0].Cells[0].Value;
user.Username = (string) dataGridView1.SelectedRows[0].Cells[1].Value;
user.FirstName = (string) dataGridView1.SelectedRows[0].Cells[2].Value;
user.LastName = (string) dataGridView1.SelectedRows[0].Cells[3].Value;
user.Email = (string) dataGridView1.SelectedRows[0].Cells[4].Value;
user.Password = (string) dataGridView1.SelectedRows[0].Cells[5].Value;
SecondObject obj = new SecondObject(user);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2021-11-17
    • 2016-03-04
    • 1970-01-01
    相关资源
    最近更新 更多