【发布时间】:2014-08-18 02:08:45
【问题描述】:
这里是新手。我正在运行 Visual Studio C# Express 2008。我有两个 Windows 窗体,每个窗体都有一个文本框。文本框在同一个类中更新,但不是从类外部调用方法的结果。调用 UpdateListOfRooms() 方法时,我需要能够更新 tbRooms.Text。我在下面的伪代码中概述了这个问题。感谢您的帮助!
fLocations.cs
fLocations_Load()
{
this.tbLocations.Text = Properties.Settings.Default.LocationID + " locationsLoad"; --updates
}
dgvLocations_SelectionChanged()
{
var rooms = new fRooms();
rooms.tbRooms.Text = Properties.Settings.Default.LocationID + " locationssSelectionChanged"; --updates
rooms.UpdateListOfRooms();
}
fRooms.cs
fRooms_Load()
{
this.tbRooms.Text = Properties.Settings.Default.LocationID + " roomsLoad"; --updates
}
UpdateListOfRooms()
{
this.tbRooms.Text = Properties.Settings.Default.LocationID + " roomsUpdateListOfRooms"; --does NOT update; still says "roomsLoad"
}
2014 年 8 月 20 日更新: 我一直很忙 :) 我阅读了@jmcilhinney 教程的所有部分,并决定通过在启动它们的 MainMenu 类中包含对 Locations 和 Rooms 这两种形式的引用来解决这个问题:
(MainMenu.cs) 创建位置和房间的实例。在构造函数中,'rooms' 被传递给 'locations' 实例并显示了两种形式。
(Locations.cs) 另一个 Rooms 实例在类范围内创建,因此类的所有方法都可以看到它。在构造函数中,此实例设置为 MainMenu 传递的实例,这意味着该类正在使用在 MainMenu 中创建的 same 实例。当用户更改 dgvLocations 上的选择时,会触发“dgvLocations_SelectionChanged”事件,该事件会调用 Rooms.UpdateRooms 方法。
(Rooms.cs) 'UpdateRooms' 方法根据传递的 'locationID' 值显示一组新房间。
此链接很有帮助。 Visual C# - Access instance of object created in one class in another.
public partial class MainMenu : Form
{
Locations locations;
Rooms rooms;
public MainMenu()
{
rooms = new Rooms();
locations = new Locations(rooms);
locations.Show();
rooms.Show();
InitializeComponent();
}
}
public partial class Locations : Form
{
Rooms rooms;
public Locations(Rooms r)
{
rooms = r;
InitializeComponent();
}
private void Locations_Load(object sender, EventArgs e)
{
// Populate this.dgvLocations using SQL query.
}
private void dgvLocations_SelectionChanged(object sender, EventArgs e)
{
// Update the rooms instance with current locationID.
rooms.UpdateRooms(dgvLocations.CurrentCell.Value.ToString());
}
}
public partial class Rooms : Form
{
public Rooms()
{
InitializeComponent();
}
private void Rooms_Load(object sender, EventArgs e)
{
// Populate this.dgvRooms using SQL query.
}
public void UpdateRooms(string locationID)
{
// Update dgvRooms based on user changing the locationID in dgvLocations
}
}
【问题讨论】:
-
我根本不是匈牙利符号的忠实粉丝,但是,如果您必须将它用于变量,那是一回事。将它用于类型名称完全是另一回事,而且完全是错误的。不应将任何类命名为
fLocations和fRooms。它们应该是LocationsForm或RoomsWindow之类的名称。然后,当您声明该类型的变量时,您可以使用匈牙利表示法并将变量命名为fLocations或frmRoms。匈牙利符号的要点是指示变量的类型。不需要指明类型的类型。 -
得到它的符号,我会做出改变。谢谢。
标签: c# visual-studio-2008