我正在使用Picturebox控件创建游戏,并添加Mousedown事件来降低picturebox的"健康"值。
当初始控件失去所有健康状况时,我想添加一个新的控件。
更新:感谢您的帮助!如果您想做同样的话,这就是我完成的代码的工作方式。
Public Class Form1
Private Sub NewBug()
Dim pbBug As New PictureBox With {
.Name = "pb",
.Width = 100,
.Height = 100,
.Top = 75,
.Left = 75,
.SizeMode = PictureBoxSizeMode.Zoom,
.Image = My.Resources.bug}
Me.Controls.Add(pbBug)
AddHandler pbBug.MouseDown, Sub(sender As Object, e As EventArgs)
MessageBox.Show("Hello", "It Worked")
End Sub
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
NewBug()
End Sub
谢谢Sunnycr
没有加起来的东西。似乎应该在类范围内声明Dim MyButton As New Button()
,您不必在本地变量上声明事件。此外,如果Mybutton是加载例程的本地,则MyButton_Click
子将不会编译。如果在类范围上声明它,则代替Dim MyButton As New Button
,如果要保留本地,您将使用WithEvents MyButton As New Button
,那么您可以做这样的事情
Dim MyButton As New Button With {
.Name = "MyButton",
.Top = 100,
.Left = 100,
.Image = My.Resources.SomeImage}
Controls.Add(MyButton)
AddHandler MyButton.Click, Sub(s As Object, ev As EventArgs)
'Do stuff
End Sub
这通常是我这样做的事情,除非我打算删除处理程序,否则我将创建一个子和使用地址,例如您如何尝试使用它。
您必须创建一个类,以通过导入Windows.system.forms的代码生成picture框;例如,您可以这样做,更改图片框的标签:
这是类:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
class Etiqueta
{
private Label etiquetaHija;
public Label EtiquetaHija { get => etiquetaHija; set => etiquetaHija = value; }
public Etiqueta(Point posicion, Size dimensiones, string texto)
{
etiquetaHija = new Label();
etiquetaHija.Size = dimensiones;
etiquetaHija.Location = posicion;
etiquetaHija.Text = texto;
etiquetaHija.Click += EtiquetaHija_Click;
}
private void EtiquetaHija_Click(object sender, EventArgs e)
{
MessageBox.Show("Etiqueta Hija");
}
}
这是表格背后的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Etiqueta etiqueta = new Etiqueta(new Point(20, 20), new Size(100, 100), "Ejemplo de creacion de un label por codigo con manejador de eventos");
this.Controls.Add(etiqueta.EtiquetaHija );
}
}
}