新手在这里。我正在运行Visual Studio C#Express 2008.我有两个Windows窗体,每个都有一个TextBox。文本框在同一个类中更新,但不是作为来自类外部的调用方法的结果。我需要能够在调用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中创建的相同实例。当用户更改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
}
}
答案 0 :(得分:0)
在第一个代码段中,您创建了一个新的fRooms
对象,但您从未调用其Show
或ShowDialog
方法,这意味着您永远不会将其显示给用户。这意味着您不会看到对该表单所做的任何更改。据推测,用户可以看到fRooms
对象,但您没有对该对象进行任何更改。
考虑一下。让我们说我给你一个记事本,你打开它看看第一页。让我们说我现在买了一个新的记事本并写在它的第一页上。你是否希望看到我写在你面前的页面上神奇地写的字?当然不是。我们都拿着一个记事本,但它们是两个不同的记事本。你在看另一个,我在另一个上写,所以你赢了;看看我写的是什么。
表格也是如此。它们都是fRooms
个对象,但它们是两个不同的fRooms
个对象。您对其中的更改不会影响另一个。如果您希望用户看到您所做的更改,则必须对用户正在查看的fRooms
对象进行更改。