从私人获取变量

时间:2018-05-05 22:27:05

标签: c#

我正在尝试创建一个播放列表标题列表,计算有多少个播放列表,并为每个播放列表添加一个窗体表单按钮。

为按钮添加播放列表标题。 选择按钮时,将按钮编号与播放列表匹配...执行操作

namespace ClassLibrary6
{
    public partial class Form1 : Form
    {
        public static List<string> IList()  //get title name for playlist
        {
            List<string> iList = new List<string>();
            foreach (var playlist in PluginHelper.DataManager.GetAllPlaylists())
            {
                iList.Add(playlist.Name);
            }
            return iList;
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            CreateTheButtons();
        }

        private void CreateTheButtons() //create buttons 
        {
            List<string> hostList = IList();
            int var1 = 0;
            foreach (var playlist in PluginHelper.DataManager.GetAllPlaylists()) //count playlists
            {
                ++var1;                
            }

            myButton[] BooTon = new myButton[var1];  //add button on playlist count
            for (int i = 0; i < BooTon.Length; i++)
            {                 
                BooTon[i] = new myButton();
                BooTon[i].Size = new Size(250, 50);
                BooTon[i].Location = new Point( 0 ,i * 60);
                BooTon[i].Text = (hostList[i]);
                BooTon[i].SetNum1(i);
                BooTon[i].Click += new EventHandler(ButtonClick);
                this.Controls.Add(BooTon[i]);                 
            }
        }

        private void ButtonClick(object sender, EventArgs e)
        {    
            myButton btn = sender as myButton;
            List<string> hostList = IList();

            MessageBox.Show(hostList[btn.GetNum1()]); //messagebox selected button playlist title
            //MessageBox.Show(btn.Num1 + ", " + iList[1] + "Button Clicked");
        }
    }

    public class myButton : Button
    {
        private int num1;

        public int GetNum1()
        {
            return num1;
        }

        public void SetNum1(int value)
        {
            num1 = value;
        }
    }
}

我将如何显示:

  MessageBox.Show(hostList[btn.GetNum1()])之外的

private void ButtonClick

我无法在没有错误的情况下将其更改为public。我的get / set是对的吗?有人会介意将我的MessageBox置于私密状态,但仍然按下按钮显示吗?

如果您还有更好的做法提示,请分享。

我用谷歌搜索并搜索,但撞墙了。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:-2)

您的问题是如何从其他方法访问按钮属性,如果是这种情况,您必须更改按钮数组的范围。

目前,在名为&#39; CreateTheButtons&#39;的方法中创建数组,这限制了此方法中数组的范围,您无法在此方法及其关联的事件侦听器之外引用该数组。

相反,您可以在表单级别声明按钮数组,例如:

    public partial class Form1 : Form
    {
       myButton[] BooTon;
       ...

更改&#39; CreateTheButtons()&#39;中的代码到:

        private void CreateTheButtons() //create buttons 
        {
         ...
           BooTon = new new myButton();
         ...
        }

从现在开始,你可以从Form1中的其他地方调用BooTon [i] .GetNum1()。

答案 1 :(得分:-2)

这里有一个疯狂的猜测,但你不能做一些事情吗?只需添加另一个功能:

public void someBtnFunct(object sender) 
{
    myButton btn = sender as myButton;
    List<string> hostList = IList();
    MessageBox.Show(hostList[btn.GetNum1()]); //messagebox selected button playlist title 
    //MessageBox.Show(btn.Num1 + ", " + iList[1] + "Button Clicked");
 }

从你想要的任何地方打电话,例如:

someBtnFunct(BooToo[0]);