我的第一个表格=主要,我的第二个表格= ChampionSelect 。我用这个
从Main打开ChampSelectprivate void pictureBox_championSelect_Click(object sender, EventArgs e)
{
ChampionSelect champSlct = new ChampionSelect();
champSlct.Show();
}
它会打开,显示12个图标作为图片框。
现在根据用户点击的图标
我希望它将主上的pictureBox_championSelect
的图像更改为 ChampionSelect 上点击的图标的图像。
对于Ex: 如果您点击 ChampionSelect 中的Ace图标,则应更改主要<上的pictureBox_championSelect
图片/ strong>到我导入资源的Ace.png。
所以我试过这个
public partial class ChampionSelect : Form
{
public ChampionSelect()
{
InitializeComponent();
this.champSlct = Main;
}
Main champSlct;
public void icon_slctAce_Click(object sender, EventArgs e)
{
champSlct.pictureBox_championSelect.Image = Properties.Resources.Ace;
}
我从这里的另一篇文章中学到了,但是,它说“Main是'Type'但是像变量一样使用”并且不起作用。最终我将根据点击的图标更改其他内容,但我认为它将与此类似,因此正确方向上的一点将更有帮助。
答案 0 :(得分:3)
您可以在ChampionSelect表单中创建一个事件,并在Main中创建一个更改图像的处理程序:
public partial class ChampionSelect : Form {
public class ChampionSelectedEventArgs: EventArgs {
public Image ChampionImage { get; set; }
public ChampionSelectedEventArgs(Image championImage) {
this.ChampionImage = championImage;
}
}
public event EventHandler<ChampionSelectedEventArgs> ChampionSelected;
public ChampionSelect() { }
protected void onChampionSelected(Image im) {
if(this.ChampionSelected != null)
this.ChampionSelected(this, new ChampionSelectedEventArgs(im));
}
public void icon_slctAce_Click(object sender, EventArgs e) {
onChampionSelected(Properties.Resources.Ace);
}
}
public partial class Main : Form {
private void pictureBox_championSelect_Click(object sender, EventArgs e) {
ChampionSelect champSlct = new ChampionSelect());
champSlct.ChampionSelected += this.championSelected;
champSlct.Show();
}
private void championSelected(object sender, ChampionSelectedEventArgs e) {
this.pictureBox_championSelect.Image = e.ChampionImage;
}
}
将整个表单传递给ChampionSelect是一种不好的做法,因为您应该为组件提供实现目标所需的最少信息。在这种情况下,ChampionSelect不需要直接访问Main的pictureBox,因为这可能会在以后的开发中引起很大的麻烦(考虑一下如果你决定不再需要一个picturebox或者你想要做一些更复杂的事情会发生什么)。
答案 1 :(得分:0)
这样的事情:
public partial class ChampionSelect : Form
{
Main champSlct;
public ChampionSelect(Main main)
{
InitializeComponent();
this.champSlct = main;
}
public void icon_slctAce_Click(object sender, EventArgs e)
{
champSlct.ChampionSelect = Properties.Resources.Ace;
}
}
public partial class ChampionSelect : Form
{
public Image ChampionSelect
{
get { return pictureBox_championSelect.Image; }
set { pictureBox_championSelect.Image = value; }
}
private void pictureBox_championSelect_Click(object sender, EventArgs e)
{
using (var champSlct = new ChampionSelect(this))
{
champSlct.Show();
}
}
/* ... */
}
其他解决方案可能是您的ChampionSelect可能会有一个公共活动,当选择了一个冠军并且您的主表单可以订阅时,会被解雇。在事件参数中,您可以传递图像。