投稿者 kai  (高校生) 投稿日時 2024/8/6 17:02:44
C#初めてそんなに立っていないのですが、継承を使った処理を書いてみたくて作ったプログラムで、ボタンを押すとテキストのカードをFormに出して、そのカードはマウスでドラッグ移動できるみたいな感じで作りたかったんですが、うまくできませんでした。

public DraggableControl() : base()が参照0と表示されてるので多分動いてなくてこれが原因だと思いますが。

初心者の書いたよくわからないプログラムを見てくれる方がいたらお願いします。
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using static マルチメモ帳.MainSystem;
namespace マルチメモ帳
{
    public partial class MainSystem : Form
    {
        private List<DraggableRichTextBox> Textcards = new List<DraggableRichTextBox>();
        private List<ImageCard> Imagecards = new List<ImageCard>();
        public MainSystem()
        {
            InitializeComponent();
        }
        #region ボタン
        private void AddCardButton_Click(object sender, EventArgs e)
        {
            DraggableRichTextBox newDraggableRichTextBox = new DraggableRichTextBox();
            //RichTextBoxのサイズを決定
            newDraggableRichTextBox.Size = new Size(200, 100);
            newDraggableRichTextBox.Location = new Point(10, 30 + ((Textcards.Count + Imagecards.Count) * 120));

            //RichTetxtBoxの初期プロパティを設定
            newDraggableRichTextBox.BackColor = Color.White;
            newDraggableRichTextBox.ForeColor = Color.Black;

            //フォームに表示
            this.cardPanel.Controls.Add(newDraggableRichTextBox);

            //リストの内容を増やす
            Textcards.Add(newDraggableRichTextBox);
        }
        private void AddImageButton_Click(object sender, EventArgs e)
        {

        }
        #endregion
    }
    #region 生成
    // DraggableControlクラス

    // DraggableRichTextBoxクラス
    public class DraggableRichTextBox : DraggableControl
    {
        public RichTextBox newRichTextBox = new RichTextBox();

        public DraggableRichTextBox()
        {
            newRichTextBox.Dock = DockStyle.Fill;
            newRichTextBox.BackColor = Color.White;
            newRichTextBox.ForeColor = Color.Black;
            newRichTextBox.BorderStyle = BorderStyle.Fixed3D;

            this.Controls.Add(newRichTextBox);
        }
    }
    // ImageCardクラス
    public class ImageCard : DraggableControl
    {
        private PictureBox newImageCard = new PictureBox();

        public ImageCard()
        {
            newImageCard.Dock = DockStyle.Fill;
            newImageCard.SizeMode = PictureBoxSizeMode.StretchImage;

            this.Controls.Add(newImageCard);
            this.Size = newImageCard.Size;  // ドラッグ可能なサイズに設定
        }

        public Image Image
        {
            get { return newImageCard.Image; }
            set { newImageCard.Image = value; }
        }
    }


    public class DraggableControl : Control
    {
        private Point mouseDownLocation;

        public DraggableControl() : base()
        {
            this.MouseDown += DraggableControl_MouseDown;
            this.MouseMove += DraggableControl_MouseMove;
            this.MouseUp += DraggableControl_MouseUp;
        }

        private void DraggableControl_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                mouseDownLocation = e.Location;
            }
        }

        private void DraggableControl_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                this.Left += e.X - mouseDownLocation.X;
                this.Top += e.Y - mouseDownLocation.Y;
            }
        }

        private void DraggableControl_MouseUp(object sender, MouseEventArgs e)
        {
            // ドラッグ終了時の処理があればここに追加
        }
    }

    #endregion
}


わからなくてGPTで生成した部分が一部入ってるのでコメントとかのやつは気にしないでください。
public class DraggableControl : Controlは動いたことがないので、動作するかもわかってないです