ApiController访问值textBox Windows窗体

本文关键字:Windows 窗体 textBox 访问 ApiController | 更新日期: 2023-09-27 18:17:50

我正在做一个项目在Windows窗体与webapi。当webapi调用时,我将得到一个textBox的值。

下面是代码片段,但它不起作用,因为它在代码后面给出错误。

namespace TCCWindows
{
    public partial class FormPrincipal : Form
    {   
        public static string PegarCoordenadas()
        {
            return edtLatitudeGMS.Text + " | " + edtlngGMS.Text;
        }
    }
    public class GPSController : ApiController
    {
        public string Posicao()
        {
            return TCCWindows.FormPrincipal.PegarCoordenadas();
        }
    }
}
错误:

Error   2   An object reference is required for the non-static field, method, or property 'TCCWindows.FormPrincipal.edtLatitudeGMS' I:'C#'TCC'TCCWindows'FormPrincipal.cs   224 20  TCCWindows
Error   3   An object reference is required for the non-static field, method, or property 'TCCWindows.FormPrincipal.edtlngGMS'  I:'C#'TCC'TCCWindows'FormPrincipal.cs   224 50  TCCWindows

ApiController访问值textBox Windows窗体

PegarCoordenadas方法是静态的,但是像edtLatitudeGMS这样的控件属于表单的某个实例。在静态方法中引用的所有内容本身都需要是静态的。所以你的代码是无效的。

当你使PegarCoordenadas静态,因为你没有一个具体的引用到一个FormPrincipal实例在现场,你想调用它,然后你采取了错误的方向来解决这个问题。必须有对这样一个实例的具体引用。当你创建FormPrincipal时,将引用存储在某个地方(可能在你的GPSController中),并使其在Posicao方法中可访问。

我的解决方案是:

public partial class FormPrincipal : Form
{   
    public static string PegarCoordenadas()
    {
        return LatitudeGMS + " | " + LongGMS;
    }
    public static string LatitudeGMS, LongGMS;
    public FormPrincipal(){
         InitializeComponents();
         edtLatitudeGMS.TextChanged += (s,e) => { LatitudeGMS = edtLatitudeGMS.Text;};
         edtlngGMS.TextChanged += (s,e) => {LongGMS = edtlngGMS.Text;};
    }
}

静态方法中只能使用static stuff