我已经编写了一个AddItem函数,可以将一个项目添加到列表视图中。我还创建了创建动态按钮的功能。但是一旦创建了动态按钮,我希望它在按下按钮时能够使AddItem功能起作用。
我不知道如何解决此问题,因为对于C#和Windows窗体而言,它相对较新。
def chooseBlock():
global player, copylist, colorList, colorChoice, blocksLeft
#running list of blocks and their positions once placed
copylist.append(player.copy())
#running list of those blocks' colors
colorList.append(colorChoice)
#resetting player position
player.y = 50
#choosing the color of the next block randomly from a list
colorChoice = random.choice(colors)
#subtracting 1 from the count of the blocks left to place after one is placed
blocksLeft = blocksLeft - 1
while True:
adjoining = set()
for i in range(len(copylist)):
for j in range(len(copylist)):
if i == j or colorList[i] != colorList[j]:
continue
if (copylist[i][0] == copylist[j][0] and abs(copylist[i][1]-copylist[j][1]) == height) or \
(copylist[i][1] == copylist[j][1] and abs(copylist[i][0]-copylist[j][0]) == width):
adjoining.add(i)
adjoining.add(j)
if not adjoining:
break
copylist = [copylist[i] for i in range(len(copylist)) if i not in adjoining]
colorList = [colorList[i] for i in range(len(colorList)) if i not in adjoining]
testmovedown = True
while testmovedown:
testmovedown = False
for i in range(len(copylist)):
if copylist[i][1] >= 390:
continue
if not any([copylist[j] for j in range(len(copylist)) \
if i != j and copylist[i][0] == copylist[j][0] and copylist[i][1] + height == copylist[j][1]]):
copylist[i][1] += height
testmovedown = True
如您所见,AddButton函数带有一个价格和商品名称,一旦单击按钮,我希望additem函数以相同的价格和商品名称运行。
谢谢!
答案 0 :(得分:0)
您可以为按钮的Tag
分配一个元组。
private void AddButton(string Name, string Text, int Posx, int Posy, double Price, string ItemName)
{
...
NewButton.Tag = (Price, ItemName);
}
然后,您可以从事件中的sender
获取该元组的值,该键实际上是按钮。
private void NewButton_Click(object sender, EventArgs e)
{
double price = (((double Price, string ItemName))((Button)sender).Tag).Price;
string itemName = (((double Price, string ItemName))((Button)sender).Tag).ItemName;
...
}
答案 1 :(得分:0)
据我了解,您需要一个为每个动态按钮使用一些特定值的处理机。您可以使用的方法很少。
使用标签属性并以某种格式保存值
import requests
def get_response(url, params):
resp = requests.get(url, params)
return resp.json()
url = 'https://en.wikipedia.org/w/api.php?action=query&list=allpages&format=json&aplimit=500'
params = {}
while True:
json_resp = get_response(url, params)
params = json_resp["continue"]
...
然后在处理程序中
newBut.Tag = $"{Price},{ItemName}";
创建字典,每次添加新按钮时,将其添加为字典的键,然后在处理程序中获取数据(但这是最糟糕的方法之一,因此请避免使用它);
使用“命令”模式。制作一个特殊的类来执行您的操作。看起来应该像这样
//always check for null
Button button = sender as Button;
string data = button.Tag as string;
//do staff with your data
这有点棘手,但引入了以后可以使用的良好模式。