2013-07-14 131 views
0

嗯,我知道这个问题已经被问了几次,但没有一个解决方案为我工作。我只是想以不同的形式将值从一种形式传递给文本框。
在第一个窗体上,双击它时会有一个数据网格,它从datagrid列中获取一个值。以一种形式将值传递给另一种形式的文本框

public partial class AvailableRooms : Form 
{ 
    private void DCRoom(object sender, DataGridViewCellMouseEventArgs e) 
    { 
    var roomnum = dgRooms.Rows[e.RowIndex].Cells["iRoomNum"].Value.ToString(); 
    RoomBooking rb = new RoomBooking();//The second form 
    rb.roomnumber = roomnum;   
    rb.Show();   
} 
} 

在第二种形式我设置文本框的属性

public partial class RoomBooking : Form 
{ 

    public RoomBooking() 
    { 
     StartPosition = FormStartPosition.CenterScreen; 
     InitializeComponent(); 
    } 

    public string roomnumber 
    { 
     get { return txtRoomNum.Text; } 
     set {txtRoomNum.Text = value;} 
    } 

} 

在此先感谢您的帮助?

+0

究竟是你遇到的问题还是你看到的错误? – Gjeltema

+0

你的代码似乎工作正常,实际的问题是什么? –

+0

当'RoomBooking'表单弹出时,txtRoomNum文本框为空。即使为其分配了值'rb.roomnumber = roomnum;',也没有值被传递给它。 –

回答

0

你必须找到控件来编辑它,因为它不属于类。

private void DCRoom(object sender, DataGridViewCellMouseEventArgs e) 
{ 
    //new value 
    var roomnum = dgRooms.Rows[e.RowIndex].Cells["iRoomNum"].Value.ToString(); 
    //The second form 
    RoomBooking rb = new RoomBooking(this); 
    //The textbox 
    TextBox roomnumber = (TextBox)rb.Controls.Find("roomnumber", true)[0]; 
    //set the value of the textbox 
    roomnumber.Text = roomnum; 
    //show second form 
    rb.Show(); 
} 
0

我会定义RoomBooking类是这样的:

public partial class RoomBooking : Form 
{ 
    public RoomBooking() // WinForms Designer requires a public parameterless constructor 
    { 
     InitializeComponent(); 
     StartPosition = FormStartPosition.CenterScreen; 
    } 

    public RoomBooking(string roomNumber) : this() // Constructor chaining 
    { 
     RoomNumber = roomNumber; 
     txtRoomNum.Text = RoomNumber; 
    } 

    public string RoomNumber { get; set; } 
} 

然后:

public partial class AvailableRooms : Form 
{  
    private void DCRoom(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     var roomNumber = dgRooms.Rows[e.RowIndex].Cells["iRoomNum"].Value.ToString(); 
     var roomBooking = new RoomBooking(roomNumber); 
     roomBooking.Show(); 
    } 
} 

希望这有助于。

+0

这当然看起来像一个更干净的方式。会尝试让你知道。 –

+0

我一直在使用这种模式成功地在我目前正在研究的项目中。另外 - 如果您只需要将'txtRoomNum'设置一次,并计划引用该属性而不是'RoomNumber'属性,则可以从类定义中删除该属性,并直接设置'txtRoomNum.Text = roomNumber'。 –

相关问题