0

実行時にカスタム コントロールを追加しようとしています。そこで、独自のペイント メソッドを使用してカスタム コントロールを作成しました。「追加」ボタンがクリックされるたびに、新しいコントロールが作成され、メイン フォームに追加されます。しかし、コントロールを追加している間、他のコントロールを見ることはできませんが、最初のコントロールのみです。何が起こっているのかわかりません。誰か助けてくれますか? 前もって感謝します。

ここに画像の説明を入力

public ref class CustomLine : public UserControl
{
private:
    Point P1,P2;
    Pen ^pen;
public:
    CustomLine(Point p1, Point p2)
    {
        P1 = p1;
        P2 = p2;
        pen = gcnew Pen(Color::Red,2);
    }
protected:
    virtual void OnPaint(System::Windows::Forms::PaintEventArgs ^e) override
    {
        e->Graphics->DrawLine(pen,P1,P2);
    }
};


private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
         {
             int xx1 = Convert::ToInt32(this->x1->Text);
             int yy1 = Convert::ToInt32(this->y1->Text);
             int xx2 = Convert::ToInt32(this->x2->Text);
             int yy2 = Convert::ToInt32(this->y2->Text);
             CustomLine ^cline = gcnew CustomLine(Point(xx1,yy1),Point(xx2,yy2));
             this->Controls->Add(cline);
             this->Invalidate();
         }
4

1 に答える 1

0

lc のコメントは問題を解決しました。ありがとうございます。

カスタム クラスで、コントロールの属性「場所」と「サイズ」の初期化が欠落していました。これらの属性を初期化した後、コントロールは期待どおりにフォームに表示され始めます。

public ref class CustomLine : public UserControl
{
private:
    Point P1,P2;
    Pen ^pen;
public:
    CustomLine(Point p1, Point p2)
    {
        P1 = p1;
        P2 = p2;
        this->Location = P1;
        this->Size = System::Drawing::Size(Point(P2.X - P1.X, P2.Y - P1.Y));
        pen = gcnew Pen(Color::Red,2);
    }
protected:
    virtual void OnPaint(System::Windows::Forms::PaintEventArgs ^e) override
    {
        e->Graphics->DrawLine(pen,P1,P2);
    }
};
于 2013-07-30T08:02:36.337 に答える