我正在尝试创建一个播放列表标题列表,计算有多少个播放列表,并为每个播放列表添加一个窗体表单按钮。
为按钮添加播放列表标题。 选择按钮时,将按钮编号与播放列表匹配...执行操作
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
置于私密状态,但仍然按下按钮显示吗?
如果您还有更好的做法提示,请分享。
我用谷歌搜索并搜索,但撞墙了。任何帮助将不胜感激。
答案 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]);