0

これにはおそらく簡単な解決策はありませんが、基本的には、一連のコントロールとそのプロパティを保存する方法が必要です。

ユーザーが画像やラベルなどのコントロールを (実行時に) 追加できるようにしています。PowerPoint のように、ある時点でこれらすべてのコントロールを参照できるようにしたいと考えています。特定のパネルにのみコントロールを追加できます。

最初に、各コントロールのプロパティをテキスト ドキュメントに格納して、各コントロールのプロパティを 1 行に書き込み、「¬」で分割して分割できるようにすることを考えましたが、非常に混乱し、特定のプロパティを読み書きすることになりました。ラインは、最初に想像したよりも少し難しいですが、最終的にはやりました。

私の現在の解決策は、単にパネルを「スナップショット」して画像を保存することですが、ストレージに関する限り、これがおそらく最も効率的な方法ではないことにすぐに気付きました。

「パネルの写真を撮る」コード...

 Using bmp As New Bitmap(QuizDesignPanel.Width, QuizDesignPanel.Height)
            bmp.SetResolution(My.Computer.Screen.BitsPerPixel, My.Computer.Screen.BitsPerPixel)
            QuizDesignPanel.DrawToBitmap(bmp, New Rectangle(0, 0, QuizDesignPanel.Width, QuizDesignPanel.Height))
            bmp.Save(QuizPath & "\" & FileName & Number & ".png", Imaging.ImageFormat.Png)

        End Using

...明らかに、他の場所で宣言されている変数がいくつかあります。

私は間違った方向に向かっているのか、プロパティを保存するためのより良い方法があるのか​​ どうか疑問に思っていました.

うまく説明できていないかもしれませんが、私の言っていることはきっと理解していただけると思います。事前にご協力いただきありがとうございます。

また、実行時にコントロールをコピーして貼り付ける簡単な方法はありますか? 私は現在、プロパティをテキストとしてクリップボードに保存し、コントロールを貼り付けるときにそれらを参照しているだけです。

編集

    Friend Class SavedControl
    Friend theName As String
    Friend theSize As Size
    Friend theLocation As Point
    Friend imgFile As String
End Class

Private Sub TopPanel_Paint(sender As Object, e As PaintEventArgs) Handles TopPanel.Paint
    Dim SaveCtl As New SavedControl
    Dim myList As Collection
    For Each n As Control In QuizDesignForm.QuizDesignPanel.Controls
        SaveCtl.theSize = n.Size
        SaveCtl.theName = n.Name
        SaveCtl.theLocation = n.Location
        myList.Add(SaveCtl)
    Next


    Try
        Dim fs As New FileStream(My.Computer.FileSystem.SpecialDirectories.Desktop, FileMode.Create, FileAccess.Write)

        Serializer.Serialize(fs, myList)

        fs.Close()
        fs.Dispose()
    Catch ex As Exception
        MessageBox.Show("Oops!", "Title", MessageBoxButtons.OK, _
                 MessageBoxIcon.Exclamation)
    End Try

End Sub

Serializer には下線が引かれていて、myList を正しく宣言したかどうかわかりません (問題があれば、System.IO と System.Xml.Serialization をインポートしました)。

4

1 に答える 1