VB.NET如何编程添加控件和事件处理程序



我正在使用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 );
        }
    }
}
 

最新更新