从Windows表单返回输入

克鲁尔

成员
加入
2018年4月20日
消息
8
编程经验
Beginner
大家好,
我是新的,C#的新手。

所以继承人 - 我创建了一个使用(运行)Windows表单的“类库”项目,我想收集其输入并在Class1.cs中使用它。
代码是基本的(几乎没有编码):

Class1.cs.
C#:
using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace TestClassLib
{
    public class Class1
    {
        public static void WinFormTest()
        {
            System.Windows.Forms.Application.Run(new Form1());


        }
    }
}

form1.cs(设计包含一个文本框和按钮)
C#:
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace TestClassLib
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            
        }


        private void button1_Click(object sender, EventArgs e)
        {
            // return textBox1.Text; // it throws an error obviously
        }
       
    }
}

我的目标是 button1_click. 储存的活动 TextBox1.值并将该值传递给Class1.cs,Aswell关闭WindowsForm对话框。
但显然我不知道要做任何事情!
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,589
地点
悉尼,澳大利亚
编程经验
10+
你为什么要呼叫application.run?这不是一个用于图书馆的正常事情。通常,您可以创建表单的实例并调用其显示或showdialog方法。在您的情况下,听起来showdialog是您应该打电话的。 ShowDialog块直到表单关闭,此时您可以通过属性和/或方法从其检索您想要的任何数据。如果您希望在Class1中的表单上的“TextBox1”的内容,则Form1应通过属性和Class1公开它,然后可以获得该属性的值。 Form1中的“返回”语句仅在函数中才能由Class1调用。返回值的函数有效地等效于返回值的属性。
 

克鲁尔

成员
加入
2018年4月20日
消息
8
编程经验
Beginner
感谢您的反馈,jmplhinney!


你为什么要呼叫application.run?这不是一个用于图书馆的正常事情。


我是非常新的C#,似乎我遵循了错误的教程。




通常,您可以创建表单的实例并调用其显示或showdialog方法。
在您的情况下,听起来showdialog是您应该打电话的。 ShowDialog块直到表单关闭,您可以通过属性和/或方法从中检索您的任何数据。


谢谢你解释它的完成如何,现在我会知道!




如果您希望在Class1中的表单上的“TextBox1”的内容,则Form1应通过属性和Class1公开它,然后可以获得该属性的值。


我看到 - 我想我跟着你在这里(见代码) -


Class1.cs.:
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


using System.Windows.Forms;


namespace ClassLibrary1
{
  public class Class1
  {
    public static void WinFormTest()
    {
      // System.Windows.Forms.Application.Run(new Form1()); // This shows up our form (but this is not the standard approach)
      
      // This is the normal Form call:
      var f1 = new Form1();
      var result = f1.ShowDialog(); // store our dialog result
      if (result == DialogResult.OK) // check if the user accepted  his input
      {
        string txt = f1.ReturnValue; // obtain our customly-created property's value
        MessageBox.Show("The input from our textbox is: " + txt); // display our value (just a test)
      }
    }
    
  }
}


form1.cs:
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace ClassLibrary1
{
  public partial class Form1 : Form
  {
    
    public string ReturnValue { get; set; } // declare a new string property
    
    public Form1()
    {
      InitializeComponent();
    }
    
    
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
      
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
      // store the value into our property and return OK for the DialogResult
      this.ReturnValue = textBox1.Text;
      this.DialogResult = DialogResult.OK;
      this.Close();
    }
  }
}




Form1中的“返回”语句仅在函数中才能由Class1调用。返回值的函数有效地等效于返回值的属性。


我不认为我会明白你在说什么,尽管我尝试了多种变体来实现函数的函数1:


Class1.cs.:
C#:
namespace ClassLibrary1
{
  public class Class1
  {
    public static void WinFormTest()
    {
      var f1 = new Form1();
      var result = f1.ShowDialog(); 
      if (result == DialogResult.OK) 
      {
        string txt = f1.ReturnOurString(); 
        MessageBox.Show("The input from our textbox is: " + txt);
      }
    }
    
  }
}


form1.cs:
C#:
namespace ClassLibrary1
{
  public partial class Form1 : Form
  {
    
    public static string ReturnOurString()
    {
      RetVal = textBox1.Text;
      return RetVal;
    }
    
    public Form1()
    {
      InitializeComponent();
    }
    
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
      
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
      this.DialogResult = DialogResult.OK;
      this.Close();
    }
  }
}


我到处都是错误(我读了它们),但我不认为我不会在不知道具有一些实际代码的正确方法的情况下都会到处。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,589
地点
悉尼,澳大利亚
编程经验
10+
我是非常新的C#,似乎我遵循了错误的教程。
这是一个应用程序,而不是图书馆。我想第一个问题是你是否应该是创建一个库。应用程序对您运行的exe编译为exe。库项目编译为DLL,这通常不会直接运行,而是由EXE或其他DLL使用。这个图书馆项目是否被另一个项目引用?如果没有,您创建了错误类型的项目开始。如果您希望从exe从Windows窗体应用程序运行,那么您可以创建一个Windows窗体应用程序项目。这将在默认情况下添加具有Form1和Call Application.Run的主要方法。
我到处都是错误(我读了它们),但我不认为我不会在不知道具有一些实际代码的正确方法的情况下都会到处。
代码一般看起来正常,所以如果您看到特定错误,那么您需要告诉我们它们是什么以及他们所在的位置,所以我们可以专门解决它们。
 
最佳 底部