Tipp-Upload: VB.NET 0222: Settings für Formen, Listview, Datagridview
von pks
Über den Tipp
Dieser Tippvorschlag ist noch unbewertet.
Der Vorschlag ist in den folgenden Kategorien zu finden:
- Fenster
Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Settings, Forms, Listview, Datagridview, ColumnWidth,DisplayIndex
Der Vorschlag wurde erstellt am: 13.03.2008 17:38.
Die letzte Aktualisierung erfolgte am 23.10.2008 14:08.
Beschreibung
Speichern und Wiederherstellen Forms Size+Location+Maximize/Normal, Spaltenbreiten im Listview und Datagridview über Einstellungen/Settings
Update 23.10.2008: Spaltenreihenfolge speichern und wiederherstellen
Schwierigkeitsgrad |
Verwendete API-Aufrufe: |
Download: |
' Dieser Source stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' ' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird. ' In den Zip-Dateien ist er jedoch zu finden. ' ------- Anfang Projektdatei FormSettingsDemo.vbproj ------- ' ------------- Anfang Datei clsFormSettings.vb ------------- ' ------------------------------------------------------------------- ' clsFormSettings VB2005 ' Klasse zum Speichern Form.Location, .Size, .Maximized ' über die Projekt.Settings ' ebenso ColumnsWidth und DiplayIndex von Listview und DataGridView ' ' Autor peter.k.sauer@web.de ' Created 14.03.2008 ' Update 23.10.2008 ' ------------------------------------------------------------------- ''' <summary> ''' Funktionen zum Speichern und Restore von FormSize, -Location und Windowstate(Maximize) ''' </summary> ''' <remarks></remarks> Public Class clsFormSettings Public Sub New() End Sub ''' <summary> ''' Form auf Basis gespeicherter Daten über Size und Location einstellen ''' </summary> ''' <param name="Frm">die Form</param> ''' <param name="Settings">Daten (String) aus den Einstellungen (Settings)</param> ''' <remarks></remarks> Public Sub FormRestore(ByVal Frm As Form, ByVal Settings As String) ' beim 1. Mal sind noch keine Settings vorhanden If String.IsNullOrEmpty(Settings) Then Exit Sub End If Dim s() As String = Settings.Split(","c) Dim Size As New Size(Integer.Parse(s(3)), Integer.Parse(s(4))) Dim Pt As New Point(Integer.Parse(s(1)), Integer.Parse(s(2))) Dim Rect As Rectangle = My.Computer.Screen.WorkingArea ' Maximalwerte beachten If Size.Width > Rect.Width Then Size.Width = Rect.Width End If If Size.Height > Rect.Height Then Size.Height = Rect.Height End If If Pt.Y < 0 Then Pt.Y = 0 ElseIf Pt.Y > (Rect.Height - 30) Then Pt.Y = Rect.Height - 30 End If If Pt.X < 0 Then Pt.X = 0 ElseIf Pt.X > (Rect.Width - 30) Then Pt.X = Rect.Width - 30 End If Frm.Location = Pt Frm.Size = Size If s(0) = "1" Then Frm.WindowState = FormWindowState.Maximized End If End Sub ''' <summary> ''' liefert die Daten von Size und Location einer Form in einem String ''' zum Abspeichern in den Einstellungen (Settings) ''' </summary> ''' <param name="Frm">die Form</param> ''' <returns></returns> ''' <remarks></remarks> Public Function FormGetSettings(ByVal Frm As Form) As String Dim s(4) As String If Frm.WindowState = FormWindowState.Normal Then s(0) = "0" s(1) = Frm.Left.ToString s(2) = Frm.Top.ToString s(3) = Frm.Width.ToString s(4) = Frm.Height.ToString Else If Frm.WindowState = FormWindowState.Maximized Then s(0) = "1" Else s(0) = "2" End If s(1) = Frm.RestoreBounds.X.ToString s(2) = Frm.RestoreBounds.Y.ToString s(3) = Frm.RestoreBounds.Width.ToString s(4) = Frm.RestoreBounds.Height.ToString End If Return String.Join(",", s) End Function ''' <summary> ''' stellt die Spaltenbreite in einem Datagridview wieder ein über ein ''' per ....GetSettings erzeugten String ''' </summary> ''' <param name="DGV"></param> ''' <param name="Settings"></param> ''' <remarks></remarks> Public Sub DGVColumnWidthRestore(ByVal DGV As DataGridView, ByVal Settings As String) If String.IsNullOrEmpty(Settings) Then Exit Sub End If Dim s() As String = Settings.Split(","c) If (s.GetUpperBound(0) + 1) = DGV.Columns.Count Then For i As Integer = 0 To s.GetUpperBound(0) DGV.Columns(i).Width = Convert.ToInt32(s(i)) Next End If End Sub ''' <summary> ''' liefert die Spaltenbreiten in einem Datagridview in einem String ''' </summary> ''' <param name="DGV"></param> ''' <returns></returns> ''' <remarks></remarks> Public Function DGVColumnWidthGetSettings(ByVal DGV As DataGridView) As String Using SR As New IO.StringWriter If DGV.Columns.Count > 0 Then For i As Integer = 0 To DGV.Columns.Count - 1 SR.Write("," & DGV.Columns(i).Width.ToString) Next Return SR.ToString.Substring(1) End If Return Nothing End Using End Function ''' <summary> ''' liefert die (vom User eingestellte) Spaltenreihenfolge ''' (DisplayIndex) in einem DataGridView als String ''' </summary> ''' <param name="DGV">das DataGridView</param> ''' <returns></returns> ''' <remarks></remarks> Public Function DGVColumnOrderGetSettings(ByVal DGV As DataGridView) As String Using SW As New IO.StringWriter If DGV.Columns.Count > 0 Then For i As Integer = 0 To DGV.Columns.Count - 1 SW.Write("," & DGV.Columns(i).DisplayIndex.ToString) Next Return SW.ToString.Substring(1) End If End Using Return Nothing End Function ''' <summary> ''' stellt die Spaltenreihenfolge in einem Datagridview wieder ein ''' </summary> ''' <param name="DGV">das DataGridView</param> ''' <param name="Settings">String aus den Settings</param> ''' <remarks></remarks> Public Sub DGVColumnsReOrder(ByVal DGV As DataGridView, ByVal Settings As String) If String.IsNullOrEmpty(Settings) Then Exit Sub End If Dim s() As String = Settings.Split(","c) If (s.GetUpperBound(0) + 1) = DGV.Columns.Count Then For i As Integer = 0 To DGV.Columns.Count - 1 DGV.Columns(i).DisplayIndex = Convert.ToInt32(s(i)) Next End If End Sub ''' <summary> ''' stellt die Spaltenbreite in einem Listview wieder ein über ein ''' per ....GetSettings erzeugten String ''' </summary> ''' <param name="Lvw"></param> ''' <param name="settings"></param> ''' <remarks></remarks> Public Sub ListviewColumnWidthRestore(ByVal Lvw As ListView, ByVal Settings As String) If String.IsNullOrEmpty(Settings) Then Exit Sub End If Dim s() As String = Settings.Split(","c) If (s.GetUpperBound(0) + 1) = Lvw.Columns.Count Then For i As Integer = 0 To s.GetUpperBound(0) Lvw.Columns(i).Width = Integer.Parse(s(i)) Next End If End Sub ''' <summary> ''' liefert die Spaltenbreiten in einem Datagridview in einem String ''' </summary> ''' <param name="Lvw"></param> ''' <returns></returns> ''' <remarks></remarks> Public Function ListviewColumnWidthGetSettings(ByVal Lvw As ListView) As String Using SW As New IO.StringWriter If Lvw.Columns.Count > 0 Then For i As Integer = 0 To Lvw.Columns.Count - 1 SW.Write("," & Lvw.Columns(i).Width.ToString) Next Return SW.ToString.Substring(1) End If Return Nothing End Using End Function ''' <summary> ''' stellt in einem Listview über Settings ''' die Spaltenreihenfolge ein (DisplayIndex) ''' </summary> ''' <param name="Lvw">das Listview</param> ''' <param name="Settings">String aus Settings</param> ''' <remarks></remarks> Public Sub ListviewColumnsReOrder(ByVal Lvw As ListView, ByVal Settings As String) If String.IsNullOrEmpty(Settings) Then Exit Sub End If Dim s() As String = Settings.Split(","c) If (s.GetUpperBound(0) + 1) = Lvw.Columns.Count Then For i As Integer = 0 To Lvw.Columns.Count - 1 Lvw.Columns(i).DisplayIndex = Convert.ToInt32(s(i)) Next End If End Sub ''' <summary> ''' liefert die Spaltenreihenfolge in einem Listview (DisplayIndex) ''' für die Speicherung in den Settings in einem String ''' </summary> ''' <param name="Lvw">das Listview</param> ''' <returns></returns> ''' <remarks></remarks> Public Function ListviewColumnOrderGetSettings(ByVal Lvw As ListView) As String Using SW As New IO.StringWriter For i As Integer = 0 To Lvw.Columns.Count - 1 SW.Write("," & Lvw.Columns(i).DisplayIndex.ToString) Next If Lvw.Columns.Count > 0 Then Return SW.ToString.Substring(1) End If Return Nothing End Using End Function End Class ' -------------- Ende Datei clsFormSettings.vb -------------- ' ------------------ Anfang Datei Form1.vb ------------------ Public Class Form1 Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As _ System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing ' Size, Location, WindowState der Form saven My.Settings.Form1Settings = FormSetting.FormGetSettings(Me) ' (vom User eingestellte) Spaltenbreiten des Listview saven My.Settings.Form1Lvw = FormSetting.ListviewColumnWidthGetSettings(ListView1) ' (vom User eingestellte) Spaltenreihenfolge des Listview saven My.Settings.Form1LvwReorder = FormSetting.ListviewColumnOrderGetSettings(ListView1) ' Einstellung in XML Datei schreiben My.Settings.Save() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load ' Size, Location, Windowstate vom letzten Aufruf wiederherstellen FormSetting.FormRestore(Me, My.Settings.Form1Settings) With ListView1 .View = View.Details For i As Integer = 0 To 10 .Columns.Add("Spalte" & i.ToString) Next .AllowColumnReorder = True End With ' Spaltenbreiten im Listview vom letzten Aufruf wiederherstellen FormSetting.ListviewColumnWidthRestore(ListView1, My.Settings.Form1Lvw) ' Spaltenreihenfolge im Listview vom letzten Aufruf wiederherstellen FormSetting.ListviewColumnsReOrder(ListView1, My.Settings.Form1LvwReorder) End Sub ''' <summary> ''' Beispiel DataGridView starten ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click Using Frm As New Form2 Frm.ShowDialog(Me) End Using End Sub End Class ' ------------------- Ende Datei Form1.vb ------------------- ' ------------------ Anfang Datei Form2.vb ------------------ Public Class Form2 Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As _ System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing ' Size, Location, WindowState der Form saven My.Settings.Form2Settings = FormSetting.FormGetSettings(Me) ' (vom User eingestellte) Spaltenbreiten saven My.Settings.Form2DGV = FormSetting.DGVColumnWidthGetSettings(DataGridView1) ' (vom User eingestellte) Spaltenreihenfolge saven My.Settings.Form2DGVReorder = FormSetting.DGVColumnOrderGetSettings(DataGridView1) End Sub Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load ' Size, Location, WindowState vom letzten Aufruf wiederherstellen FormSetting.FormRestore(Me, My.Settings.Form2Settings) For i As Integer = 0 To 10 Dim s As String = "Spalte" & i.ToString DataGridView1.Columns.Add(s, s) Next DataGridView1.AllowUserToResizeColumns = True DataGridView1.AllowUserToOrderColumns = True ' Spaltenbreiten vom letzten Aufruf wiederherstellen FormSetting.DGVColumnWidthRestore(DataGridView1, My.Settings.Form2DGV) ' Spaltenreihenfolge vom letzten Aufruf wiederherstellen FormSetting.DGVColumnsReOrder(DataGridView1, My.Settings.Form2DGVReorder) End Sub End Class ' ------------------- Ende Datei Form2.vb ------------------- ' ----------------- Anfang Datei Module1.vb ----------------- Module Module1 Public FormSetting As New clsFormSettings End Module ' ------------------ Ende Datei Module1.vb ------------------ ' -------- Ende Projektdatei FormSettingsDemo.vbproj --------
Diskussion
Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits
Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.