Классы кнопок, которые я написал на C #, не будут отображаться в Windows Form при запуске

#c# #winforms #button #methods

#c# #winforms #кнопка #методы

Вопрос:

Только начал изучать Visual Studio, и я пытаюсь создать звуковую панель в Windows Forms. ButtonMaker(); это функция, которую я использую для создания кнопки для каждого звукового файла в моем каталоге, поэтому мне не нужно создавать 70 разных кнопок для каждого звука, но когда я запускаю программу, в окне формы ничего не отображается. Кто-нибудь знает почему? Я пробовал вызывать функцию в Main() и в начальном классе Form1, но ни в том, ни в другом ничего не происходит. Файл класса Forms здесь:

 using System;
using System.Drawing;
using System.Windows.Forms;

namespace MySoundBoard
{
    public partial class Form1 : Form
    {
 
        public Form1()
        {
            InitializeComponent();
            ///Tried running it here

            
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ///Tried running it here
        }


        private void ButtonMaker()
        {
            string[] files = Soundfiles.GetFile();
            foreach (var item in files)
            {
                string btnName = item.ToUpper();
                Button btNname = new Button();
                btNname.Text = item;
                int x = 40;
                int y = 40;
                btNname.Location = new Point(x, y);
                x = x   50;
                if (x>900)
                {
                    x = 40;
                    y = y   30;
                }
                

            }
        }

        private void button1_Click(object sender, EventArgs e)
        {

        }
    }
}
  

Вот класс SoundFiles:

 using System.IO;
using System;
using System.Text;
using System.Diagnostics;
using WMPLib;


namespace MySoundBoard
{
    class Soundfiles    {

        WMPLib.WindowsMediaPlayer Player;


        static public string[] GetFile() {
            string txtPath = @"C:Documentspathtosound effects";

            string[] files =
            Directory.GetFiles(txtPath, "*ProfileHandler.cs", SearchOption.TopDirectoryOnly);
                
            return files;
        }
        public void PlayFile(String url)
        {
            Player = new WMPLib.WindowsMediaPlayer();
            Player.URL = url;
            Player.controls.play();
        }


    }

    
}
  

И основной файл проекта (с которым еще не работал):

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MySoundBoard
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            ///Tried running it here
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

        }
    }
}
  

Как уже было сказано, я новичок в этом языке, и любая помощь будет оценена!

Комментарии:

1. Вы создаете кнопки, но не добавляете их в элемент, подобный панели .

2. Вам не хватает инструкции: this. Элементы управления. Добавить (btnName);

3. int x = 40; int y = 40; в противном случае они должны быть вне цикла… Вероятно, вам следует найти другие средства, кроме кнопок, для представления ваших файлов. Возможно, ListView.

Ответ №1:

Вы создаете кнопки, но никогда не добавляете их в форму. Просто добавьте

 this.Controls.Add(btNname);
  

Следующее, что ваши кнопки ничего не будут делать. Вам также нужно будет добавить обработчик событий.

 btNname.Click  = ...;
  

Чтобы узнать, какая кнопка воспроизводит тот или иной звук, вам нужно найти способ вызвать эту ассоциацию. Хакерский подход заключается в

 btNname.Tag = item;
  

а затем оцените Tag позже

Комментарии:

1. Это очень помогло! Спасибо!