首页 > 解决方案 > c#无法从另一个表单与列表框交互

问题描述

我有以下表格和一个名为setIndex

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 ProjectName
{
    public partial class SettingsWindow : Form
    {
        internal readonly static SettingsWindow Instance = new SettingsWindow { Visible = false };

        public SettingsWindow()
        {
            InitializeComponent();
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string defaultsearch = listBox1.GetItemText(listBox1.SelectedItem);
            Core.RegistryHelper.SaveSetting("Config", "ds", defaultsearch);
            if (defaultsearch == "aaa") {
                Core.LandingUrlOrig = Core.DomainName + "/defaulturl1.php";
            } else {
                Core.LandingUrlOrig = Core.DomainName + "/defaulturl2.php";
            }
        }

        public static void setIndex(int i)
        {
            listBox1.SelectedIndex = i;
        }
    

MainWindow在初始化期间调用的另一种形式上,我调用:

    public MainWindow()
    { 
        SettingsWindow.setIndex(0);
    }

我得到的错误是: An object reference is required for the non-static field, method, or property 'SettingsWindow.listBox1'

最初该listbox方法不是静态的,因此从MainWindow. 但是现在,即使表单已被实例化,列表框似乎也不存在。我该如何解决这个问题?我只是在学习 C#。

先感谢您

标签: c#

解决方案


因为该函数setIndex是静态的,所以您需要使用 Instance 属性:

 public static void setIndex(int i)
 {
     Instance.listBox1.SelectedIndex = i;
 }

或者不要将该函数设为静态,然后在主窗口函数中使用实例:

 public void setIndex(int i)
 {
     listBox1.SelectedIndex = i;
 }

public MainWindow()
{ 
    SettingsWindow.Instance.setIndex(0);
}

推荐阅读