对于C#.NET来说还是新手,这么简单(有说明)是首选。 :)我有一个带有几个文本框的Windows窗体。我希望能够在单独的文件中阅读这些文本框的内容,。我看过文章(也在这里的stackoverflow),它涵盖了类似的问题,但在我的案例中不起作用。 我想要的数据可以在Form1的文本框中找到。 我希望这些数据去的地方是 - > myOtherCS,它将在方法(Savedoc)中使用。
在Form1.cs中,我有:
private myOtherCS allOtherMethods;
public static string myText= "";
public static string mytitle = "";
public Form1()
{
InitializeComponent();
allOtherMethods = new myOtherCS();
}
/* I would like the myText to be filled with the contents of Textbox1
* and mytitle to be filled with contents of Textbox2. Ideally when the
* Textboxes have been changed. */
private void TextBox1_TextChanged(object sender, EventArgs e)
{
myText = Textbox1.Text;
}
private void TextBox2_TextChanged(object sender, EventArgs e)
{
myTitle = Textbox2.Text;
}
在myOtherCS文件中,我希望能够在不同的方法中使用这些值。所以首先可能“得到”和“设定” - 他们。 我已经尝试了很多东西,但是这里有一个...来得到这个想法......我知道你必须改变两个文件中的东西,并且有,但这是为了得到这个想法。
public class GetTextBoxes
{
private string title;
private string text;
public string Title
{
get { return title; }
set { title = value; }
}
public string Text
{
get { return text; }
set { text = value; }
}
}
public void SaveDoc()
{
GetTextBoxes.title;
GetTextBoxes.text;
}
这是PSEUDOcode,试图展示我想做的事情。我尝试了很多东西,如果有人知道怎么做,我会非常感激!提前致谢
答案 0 :(得分:1)
如果您将字符串存储为公共字符,那么您只需要说...
Form1 form=new Form1();
Console.out.write(form.myText);
如果您的字符串是公开的,则无需使用getter和setter。虽然我可能会将它们视为静态。这些方法将在每次更改后更新,因此不需要额外的方法。你也可以将你的标题对象设置为公共类型,这样你对字符串所做的就可以再次实现,但是你的表单部分可以实现。
public System.Windows.Forms.Button button1;
答案 1 :(得分:1)
我认为最好的方法就是你所做的。有一个公共类来获取和设置值并在不同的窗体之间共享它是我自己总是使用的想法。您还可以通过表单构造函数传递您的值,但这是您希望仅在表单初始化时获取值!所以在你的情况下,我认为这不是一个好主意。 。 。祝你好运
答案 2 :(得分:1)
你可能想改变你的思维方式,这里有一些想法:
在数据模型方面更多地考虑它。你的Form1试图在概念上代表什么?在此基础上创建您的数据模型以支持该需求。根据数据模型,我的意思是你在问题中定义了一个简单的带有getter / setter的类,你可以调用你的类Document。
公共类文档 { public string Title {get; set;} public string Text {get; set; }
所以不要在Form1中使用静态字段:
public static string myText =“”; public static string mytitle =“”;
您可以定义公共属性public Document MyDocument {get;set;}
并在构造函数中初始化它。
然后您可以使用数据绑定,这样您就可以将模型(Document)绑定到Form1中的控件。
想想你在Form1和myOtherCS之间的互动。您如何设想用户的工作流程?填写Form1然后执行操作?转到另一种形式,等? myOtherCS只是一个处理Form1数据的服务吗?
我不想帮助解决您的具体技术问题,而是希望扩大您的视野并确定您真正想做的事情,然后找到最合适的技术解决方案来满足这一要求。相信我,我已经在WinForms上挣扎了很长时间,但更重要的是要清楚你想要在高级别上完成什么。
答案 3 :(得分:0)
您需要在textchanged事件处理程序中设置allOtherMethods的属性。
以下是代码:
private void TextBox1_TextChanged(object sender, EventArgs e)
{
allOtherMethods.Text = Textbox1.Text;
}
private void TextBox2_TextChanged(object sender, EventArgs e)
{
allOtherMethods.Title= Textbox2.Text;
}
代码
public void saveText()
{
GetTextBoxes.title;
GetTextBoxes.text;
}
毫无意义。你不能在类之外声明一个方法。
c#是一种OOP语言。所以这里的常见概念是你应该总是尝试在事件处理程序中设置属性或调用实例的方法。
答案 4 :(得分:0)
假设每个主窗体和另一个窗体都包含一个textBox。您可以做的是使用Show()
打开另一个表单,将主表单作为参数传递。然后,您可以为文本更改添加事件处理程序。当主表单的TextBox
文本发生更改时,下面的示例将更新另一个表单上的TextBox
。这是您的主要形式:
public partial class Form1 : Form
{
OtherForm otherForm;
public Form1()
{
InitializeComponent();
otherForm = new OtherForm();
otherForm.Show(this);
textBox1.TextChanged += textBox1_TextChanged;
}
void textBox1_TextChanged(object sender, EventArgs e)
{
otherForm.textBox1.Text = textBox1.Text;
}
}
在OtherForm
设计器中,将textBox1
Modifiers
设为Public
,如下所示
<强> [编辑] 强>
根据Servy的建议,这是一种更好的方法。
public partial class Form1 : Form
{
OtherForm otherForm;
public Form1()
{
InitializeComponent();
otherForm = new OtherForm();
otherForm.Show(this);
}
}
//...
public partial class OtherForm : Form
{
public OtherForm()
{
InitializeComponent();
}
string SomeMethod()
{
var parent = (Form1)this.Owner;
return parent.textBox1.Text;
}
private void textBox1_MouseClick(object sender, MouseEventArgs e)
{
textBox1.Text = SomeMethod();
}
}
答案 5 :(得分:0)
您已经说过,当您单击按钮时,您的表单正在调用另一个类中的方法,而其他方法在执行计算时需要使用文本框的当前值。处理这种情况的正确方法是让这些其他方法接受两个字符串参数,并在调用这些方法时传递文本框的Text
值。
这样做可以删除文本更改的处理程序和公共静态字段。它确保信息不会暴露给所有内容,只有这两个类只需要访问它,它将使您的程序更容易维护。