我绝对没有OOP经验。我是大学一年级学生,实习项目要求我使用C#进行表单申请。
我有两个类,一个表单类Form和一个静态类“ Port_Com”,在其中编写了与Raspberry通信的函数。
这是我想从第二堂课中调用的方法:
public partial class Form1 : Form
{
{...}
public void WriteLine(string message)
{
this.richTextBox1.AppendText(Environment.NewLine + ">" + message);
}
}
我的第二堂课:
public class Port_Com
{
private static void Main()
{
Form1 form = new Form1();
form.WriteLine("test");
}
}
基本上我想在我的富文本框中显示一个日志。
答案 0 :(得分:1)
您应该 find Form1
实例或 create 实例,然后调用该方法:
using System.Linq;
...
//TODO: Main is a specific name (entry point of the exe), I suggest renaming it
private static void Main() {
// Do we have opened Form1?
Form1 form = Application
.OpenForms // from all opened forms
.OfType<Form1>() // we want just Form1 instances
.LastOrDefault(); // If we have several, let's take the last one
// Comment out this fragment if you don't want to create it
if (null == form) {
// No open Form1 forms found
form = new Form1(); // Let's create Form1 instance manually
form.Show(); // And Show it
}
else {
// form has been found; but you may want
// Resore it if it's minimized
if (form.WindowState == FormWindowState.Minimized)
form.WindowState = FormWindowState.Normal;
// Bring it to front
form.BringToFront();
// Set keyboard focus on it
if (form.CanFocus)
form.Focus();
}
// We have a form to work with, we are ready to call the method
if (null != form)
form.WriteLine("Hello World!");
else { // No Form1 intance has been found; we can't call WriteLine
//TODO: put relevant code here
}
}
答案 1 :(得分:0)
Application.Run(new Form1());
入口点静态方法通常会创建类似以下的主要形式:
Form1
您需要将var mainForm = new Form1();
Application.Run(mainForm );
...
mainForm.WriteLine("Hello!");
对象保存在某个地方,然后可以调用其方法,例如:
COM
另外,最好重构日志方法以允许按here的描述从另一个线程调用它,因为窗口的控件必须仅在UI线程中更新。由于这是与public void WriteLine(string message)
{
if (this.richTextBox1.InvokeRequired)
{
var d = new SafeCallDelegate(WriteLine);
Invoke(d, new object[] { message });
}
else
{
this.richTextBox1.AppendText(message);
}
}
端口通信有关的,因此很有可能也会从后台线程调用它。喜欢:
$request->validate([
'username' => 'string',
'password' => 'required|string',
]);
$credentials = ['username' =>$request->get('username'), 'password' =>$request->get('password')];
try {
if(!Auth::attempt($credentials))
return response()->json([
'message' => 'Unauthorized'
], 401);
$user = $request->user();
$tokenResult = $user->createToken('Personal Access Token');
$token = $tokenResult->token;
if ($request->remember_me)
$token->expires_at = Carbon::now()->addWeeks(1);
$token->save();
return response()->json([
'access_token' => $tokenResult->accessToken,
'token_type' => 'Bearer',
'expires_at' => Carbon::parse(
$tokenResult->token->expires_at
)->toDateTimeString()
]);
} catch(Exception $e){
echo $e;
}
答案 2 :(得分:0)
没有实例就不能调用非静态函数。当函数是非静态的时,您需要一个类的实例。 要调用表单类,您需要执行以下操作:
From1 frm = new Form1();
frm.WriteLine("text");
答案 3 :(得分:0)
我认为您应该在Port_Com类中定义一个静态事件。表单准备好后,注册事件。如果Port_Com可以告诉表单显示内容,则触发事件。
number_of_combinations
答案 4 :(得分:0)
这取决于您的应用程序处于什么状态...
我假设您有一个运行的WinForms应用程序,其中至少有一个打开的Form。
然后,您可以使用Application.OpenForms
来搜索Form并调用方法
例如
Form1 instance = Application.OpenForms.OfType<Form1>().Single();
instance.WriteLine(...);