C#如何从另一个类调整表单中的文本框属性?
|
我仍然无法获取如何从C#的另一个class.im中访问表单中的控件的方法,因此我的“尝试和错误”方法实际上不起作用。
谁能给我一个简单的指南?
这是我的代码段
表格1:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
print pr = new print();
pr.p();
}
}
}
这是班级打印:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsApplication2
{
class print
{
public print()
{
}
public void p()
{
Form1 f = new Form1();
f.textBox1.Text = \"change text\";
}
}
}
如您所见,即时消息试图更改打印类中的textBox1属性。但是当我编译它时,即时消息抛出System.StackOverflowException!
我现在变得沮丧,因为我不能从另一个班级访问它。
任何人都可以给我一步一步讲如何从印刷课上称呼它吗?我尝试了互联网上的许多步骤,但我只是听不懂。
顺便说一句,我确实使文本框的修饰符公开了。
没有找到相关结果
已邀请:
8 个回复
稀瓣囊
方法创建了一个新表单,并且表单的构造函数再次调用
方法。然后创建另一个新表单,其构造函数再次调用calls2ѭ方法,并一遍又一遍地循环。那是ѭ5的来历。 解决方案是得到一本教面向对象编程的书。我知道这听起来可能有些口齿不清或无济于事,但是您在“问答”网站上获得的所有答案都无法充分向您解释为什么您要尝试做的是一个坏主意。诸如“ 6”之类的外部帮助程序类不应与表单类的私有成员混淆。相反,您应该在表单类上调用进行这些修改的公共方法。 快速和肮脏的修复程序要求您找出一种方法来引用
方法中的表单类实例。这是您能够在该对象上调用方法的唯一方法,而不是创建该类的新对象。一种方法是将引用作为参数传递给方法:
另外,作为某种无关紧要的风格注释,您应该知道,几乎所有C#(和.NET平台)的编码指南/约定都要求类和方法的名称为PascalCased,而不是camelCased。因此,您的
类实际上应命名为
。
辅奈
中创建了
的新实例:
然后在
的构造函数中,创建
的新实例,如下所示:
它创建一个新的实例
,创建一个新实例
,该实例创建一个新的instance6ѭ实例,该实例创建一个新的
实例,... 您已经创建了一个无限循环,该循环会杀死堆栈。
奥李
芯伶句餐绕
但是,有许多设计模式可以帮助实现这一点,例如MVP或MVVM。但是,对于您当前的水平,它们可能有点先进。如果这只是一个简单的小项目,那么上面的代码将很好用。
揽芳僵迷仇
的原因),但是通常,您可以使用属性来允许访问,而不会暴露实际的
控件本身;有关大量详细信息,请参见此MSDN页面,但是例如:
然后,为了使用此属性:
编辑: 由于至少有一个通过评论的提要,并且有足够的动力让至少一个人发现这一点“很棒”,因此我将提供一种略有不同的方法,仍然使用该属性... 假设目标是要在
中以
文本,我们将只返回需要的内容:
以便:
或者,您想to32ѭ,或使用
中的文字:
以便:
戊袱
类打印:
嘘伪
并在印刷类中使用它来获取表格
可以通过p(fpassed)来调用它;
呈辖玫割善