English 中文(简体)
C # 与存取器通过
原标题:Passing with Accessors in C#
  • 时间:2012-05-27 11:21:09
  •  标签:
  • c#

我有些麻烦, 无法在表格之间通过变量。 我创建了一个按钮阵列, 想要将按钮文本传送到下一个表格中。 但这只是返回一个 Null 值

第一种形式

private string staffmem;
    public string Staffmem
    {
        get
        {
            return staffmem;
        }
    }

    public void ClickButton(Object sender, EventArgs e)
    {          
        Button btn = (Button)sender;
        staffmem = btn.Text;
        MessageBox.Show("Welcome " + staffmem);

        MainScreen ms = new MainScreen();
        ms.Show();
    }

然后以第二种形式出现

        private void MainScreen_Load(object sender, EventArgs e)
    {  
        Form1 f1 = new Form1();
        staffmem = f1.Staffmem;

任何帮助都将非常感谢。

最佳回答

您正在通信的两端创建新表单: 当单击按钮时, 当您想要检索文本时 -- 这导致在新建对象上访问 < code> Staffmem 字段, 而该字段尚未设置为任何内容, 因此返回了 < code> null 值 。

要能够检索文本, 您需要将 same < code > Form1 对象在创建时设定为 MainScreen :

MainScreen ms = new MainScreen(form1);

此处 form1 是实际的 Form1 对象, 并存储在 mainScreen 中, 作为成员变量

// in MainScreen class
private Form1 f1;

然后在存储成员变量上访问该对象上的 Staffem :

// in MainScreen_Load()
staffmem = f1.Staffmem;

note :根据您的需要,您可能不想每次点击按钮时都创建一个新的 MainScreen 。 在这种情况下(如果您已经创建了您想要与您联系的 MainScreen ,您需要将 mainScreen 对象传给 Form1 对象,以及当创建 Form1 对象时(遵循上述技术提示)

问题回答

您没有通过任何东西, 您正在创建新表单

Form1 f1 = new Form1(); 
staffmem = f1.Staffmem; 

如果数据要共享 - 一个非常糟糕的方法就是让字符串静下来

private static string staffmem;

您正在创建一个完整的新的 Form1 - 其中, 您想要使用现有实例 。

您需要做的是在您的 < code> MainScreen 对象上定义 < code> Staffem , 并在创建后设置它 。

MainScreen ms = new MainScreen();
ms.Staffmem = btn.Text;

Then, in your MainScreen_Load: Set the value.

您正在对两个不同的对象工作, 首先您创建一个 Form1 对象, 然后单击此按钮将设置该对象的属性值, 但是在主屏幕中您将创建一个新的 Form1 实例 。

您可以通过表单对象作为主文件本身的引用。

MainScreen ms = new MainScreen(this);
ms.Show();

然后在MainScreen班上 更新建筑师

public MainScreen(Form1 form)
{
    this.form1 = form;
}

并保持引用 在字段,像这样。

private Form1 form1;

在这之后你可以再做一次

private void MainScreen_Load(object sender, EventArgs e)
{  
    staffmem = form1.Staffmem;
}




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...