【问题标题】:Different functionalities of button[] at each click on a particular button每次单击特定按钮时 button[] 的不同功能
【发布时间】:2014-12-21 15:07:26
【问题描述】:

我有一个动态创建的按钮数组,假设有 8 个按钮,我想要的是当我单击一个特定按钮时,它的背景图片会发生变化,并且按钮的名称存储在一个链接列表中。当我再次单击同一个按钮时,背景图片会恢复到原来的状态,并且按钮名称将从链接列表中删除。现在我可以做第一部分了,第二次点击没有按我想要的那样工作。

基本上它是一个数据结构项目(购物商店),因此我使用链表,我有一个链表,其内容通过图片框 [] 和标签显示。在这里我要做的是当我单击图片框时,该特定节点的内容将添加到新的链接列表(添加到购物车)中,当我再次单击图片框时,该特定项目将从链接中删除列表(从购物车中删除)。第一次点击它正在做我想要它做的事情,但第二次点击并没有真正起作用。

这是一个数据结构项目,因此我不能真正为链表使用任何内置类,我必须自己编写所有方法,我做到了,而且它们可以工作。

cb[i].Click += (sender, e)=>{

if (flag == 0) {
   // Console.WriteLine(obj.Retrieve(index).NodeContent);
   // Console.WriteLine(obj.Retrieve(index).number);
   inv.Add(obj.Retrieve(index).NodeContent, obj.Retrieve(index).number);
   bill += Convert.ToInt32(obj.Retrieve(index).number);
   cb[index].Image = Image.FromFile(@"F:\uni work\3rd semester\project images\rcart.jpg");
   flag++;
}
else if (flag == 1)
{
   // Console.WriteLine(bill);
   bill -= Convert.ToInt32(obj.Retrieve(index).number);
   // Console.WriteLine(bill);
   inv.Delete(index);
   cb[index].Image = Image.FromFile(@"F:\uni work\3rd semester\project images\cart.png");
   flag--;
}

【问题讨论】:

  • 向我们展示您的代码并解释 a) 问题出在哪里以及 b) 为什么您使用链表而不是 List
  • 您遇到了什么问题?删除图片或从 LinkedList 中删除项目?
  • 请您澄清一下这是否是 WinForms、ASP.NET Web 表单等。详细说明您的问题是什么(正在做什么或没有做什么)以及到目前为止您尝试过的问题。如果可能,请包含代码示例,请考虑在dotnetfiddle.net 提供最小可重复示例
  • @TaW 我正在使用按钮数组,链表存储要赋予按钮的名称
  • @MarkHall 我在从链接列表中删除项目时遇到问题

标签: c# winforms button buttonclick


【解决方案1】:

由于您使用的是 LinkedList,它确实有一个 Contains 方法和一个 Remove 方法,它们接受一个字符串。你还没有具体说明你的问题是什么,这应该有效。当您将图像分配给控件时,您会丢失告诉您它是什么图像的信息。

public partial class Form1 : Form
{
    LinkedList<String> myList = new LinkedList<String>();
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < 8; i++)
        {
            Button b = new Button() { Height = 30, Width = 70, Location = new Point(i, 50 * i),Name = "NewButton" + (i + 1).ToString() , Tag=i};
            b.Click += b_Click;
            this.Controls.Add(b);
        }
    }

    void b_Click(object sender, EventArgs e)
    {
       Button b = (Button)sender;
        if(myList.Contains(b.Name)) //Check if button is in the List then Change Picture and remove
        {
            b.BackgroundImage = Properties.Resources.Peg_Blue;
            myList.Remove(b.Name);
        }
        else
        {
            b.BackgroundImage = Properties.Resources.Peg_Red;
            myList.AddLast(b.Name);
        }


    }
}

【讨论】:

    【解决方案2】:

    为什么不为每个按钮创建一个类,包含两个图像并在每次点击时在它们之间切换?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      相关资源
      最近更新 更多