eigener vb net Texteditor: Funktionen erweitern

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 36 Antworten in diesem Thema. Der letzte Beitrag () ist von Thiemo1991.

    eigener vb net Texteditor: Funktionen erweitern

    Hallo ihr lieben,

    ich habe mit ChatGTP einen Texteditor programmiert und es geht auch aber nicht, dass ich mit einem Doppelklick auf das Dokument, den Inhalt in die RichTextbox bekomme.

    Mein Code, den ich bisher habe, ist:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Drawing.Text
    3. Public Class Form1
    4. Inherits Form ' Fügt die Form-Klasse hinzu, von der Ihre Klasse erbt
    5. ' Deklaration von Variablen und Initialisierung
    6. Private fontSizes As New List(Of Integer) From {8, 10, 11, 12, 14, 16, 18, 20}
    7. Private selectedColor As Color = Color.Black ' Standardfarbe ist Schwarz
    8. Private autoSaveEnabled As Boolean = False ' Variable für automatisches Speichern
    9. Private lastFilePath As String = "" ' Speichert den zuletzt überwachten Dateipfad
    10. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    11. ' Verknüpfen von Ereignishandlern
    12. AddHandler cmbFontSize.SelectedIndexChanged, AddressOf CmbFontSize_SelectedIndexChanged
    13. AddHandler cmbFontFamily.SelectedIndexChanged, AddressOf CmbFontFamily_SelectedIndexChanged
    14. AddHandler btnBlack.Click, AddressOf ColorButton_Click
    15. AddHandler btnRed.Click, AddressOf ColorButton_Click
    16. AddHandler btnBold.Click, AddressOf BtnBold_Click
    17. AddHandler btnItalic.Click, AddressOf BtnItalic_Click
    18. AddHandler btnUnderline.Click, AddressOf BtnUnderline_Click
    19. AddHandler Me.DoubleClick, AddressOf DesktopDoubleClickHandler
    20. ' Befüllen des Dropdown-Menüs mit den Schriftgrößen
    21. For Each fontSize As Integer In fontSizes
    22. cmbFontSize.Items.Add(fontSize)
    23. Next
    24. ' Festlegen der Standard-Schriftgröße
    25. cmbFontSize.SelectedIndex = 2
    26. ' Laden der installierten Schriftarten in die ComboBox
    27. Dim installedFonts As New InstalledFontCollection()
    28. For Each font As FontFamily In installedFonts.Families
    29. cmbFontFamily.Items.Add(font.Name)
    30. Next
    31. ' Hinzufügen des RichTextBox-Steuerelements
    32. With txtEditor
    33. .Multiline = True
    34. .AllowDrop = True
    35. End With
    36. Me.Controls.Add(txtEditor)
    37. ' Laden der gespeicherten Einstellungen beim Laden des Formulars
    38. LoadSettings()
    39. End Sub
    40. Private Sub LoadFile(filePath As String, fileExtension As String)
    41. Try
    42. If filePath.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then
    43. ' Öffnen als TXT-Datei
    44. txtEditor.LoadFile(filePath, RichTextBoxStreamType.PlainText)
    45. ElseIf filePath.EndsWith(".rtf", StringComparison.OrdinalIgnoreCase) Then
    46. ' Öffnen als RTF-Datei
    47. txtEditor.LoadFile(filePath)
    48. Else
    49. MessageBox.Show("Das Dateiformat wird nicht unterstützt.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    50. End If
    51. Catch ex As Exception
    52. MessageBox.Show("Fehler beim Öffnen der Datei: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    53. End Try
    54. End Sub
    55. Private Sub LoadSettings()
    56. ' Laden der zuletzt ausgewählten Schriftgröße aus den gespeicherten Einstellungen, falls gültig
    57. If My.Settings.FontSize >= 0 AndAlso My.Settings.FontSize < fontSizes.Count Then
    58. cmbFontSize.SelectedIndex = My.Settings.FontSize
    59. End If
    60. ' Laden der zuletzt ausgewählten Schriftart aus den gespeicherten Einstellungen, falls gültig
    61. If Not String.IsNullOrEmpty(My.Settings.SelectedFont) AndAlso cmbFontFamily.Items.Contains(My.Settings.SelectedFont) Then
    62. cmbFontFamily.SelectedItem = My.Settings.SelectedFont
    63. End If
    64. ' Laden der zuletzt ausgewählten Farbe aus den gespeicherten Einstellungen
    65. selectedColor = My.Settings.SelectedColor
    66. ' Laden des Status des automatischen Speicherns
    67. autoSaveEnabled = My.Settings.AutoSaveEnabled
    68. AutomatischesSpeichernToolStripMenuItem.Checked = autoSaveEnabled
    69. ' Laden des zuletzt geöffneten Textes aus den gespeicherten Einstellungen, wenn automatisches Speichern aktiviert ist
    70. If autoSaveEnabled AndAlso Not String.IsNullOrEmpty(My.Settings.LastText) Then
    71. txtEditor.Rtf = My.Settings.LastText
    72. End If
    73. End Sub
    74. Private Sub SaveSettings()
    75. ' Speichern der ausgewählten Schriftgröße in den Einstellungen
    76. My.Settings.FontSize = cmbFontSize.SelectedIndex
    77. ' Speichern der ausgewählten Schriftart in den Einstellungen
    78. My.Settings.SelectedFont = cmbFontFamily.SelectedItem.ToString()
    79. ' Speichern der ausgewählten Farbe in den Einstellungen
    80. My.Settings.SelectedColor = selectedColor
    81. ' Speichern des aktuellen Textes in den Einstellungen
    82. My.Settings.LastText = txtEditor.Rtf
    83. ' Speichern des Status des automatischen Speicherns
    84. My.Settings.AutoSaveEnabled = autoSaveEnabled
    85. ' Speichern der Einstellungen
    86. My.Settings.Save()
    87. End Sub
    88. Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    89. ' Speichern der Einstellungen beim Schließen des Formulars
    90. SaveSettings()
    91. End Sub
    92. Private Sub CmbFontFamily_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbFontFamily.SelectedIndexChanged
    93. ' Anwenden der ausgewählten Schriftart auf den Text
    94. If cmbFontFamily.SelectedIndex <> -1 Then
    95. Dim fontFamily As String = cmbFontFamily.SelectedItem.ToString()
    96. Dim currentFont As Font = txtEditor.SelectionFont
    97. Dim newFont As New Font(fontFamily, currentFont.Size, currentFont.Style)
    98. txtEditor.SelectionFont = newFont
    99. txtEditor.Focus()
    100. End If
    101. End Sub
    102. Private Sub CmbFontSize_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbFontSize.SelectedIndexChanged
    103. ' Speichern der aktuellen Auswahl
    104. Dim selectionStart As Integer = txtEditor.SelectionStart
    105. Dim selectionLength As Integer = txtEditor.SelectionLength
    106. Dim selectedText As String = txtEditor.SelectedText
    107. Dim originalFont As Font = txtEditor.SelectionFont
    108. Dim originalColor As Color = txtEditor.SelectionColor
    109. ' Ändern der Schriftgröße
    110. Dim selectedSize As Integer = fontSizes(cmbFontSize.SelectedIndex)
    111. txtEditor.SelectionFont = New Font("Arial", selectedSize)
    112. ' Wiederherstellen der vorherigen Auswahl
    113. txtEditor.Select(selectionStart, selectionLength)
    114. txtEditor.SelectedText = selectedText
    115. txtEditor.Select(selectionStart, selectedText.Length)
    116. End Sub
    117. Private Sub ColorButton_Click(sender As Object, e As EventArgs)
    118. Dim btn As Button = DirectCast(sender, Button)
    119. Dim selectionStart As Integer = txtEditor.SelectionStart
    120. Dim selectionLength As Integer = txtEditor.SelectionLength
    121. ' Überprüfen, ob Text ausgewählt ist
    122. If selectionLength > 0 Then
    123. ' Text ist ausgewählt, ändere Farbe des ausgewählten Textes zeichenweise
    124. For i As Integer = selectionStart To selectionStart + selectionLength - 1
    125. txtEditor.SelectionStart = i
    126. txtEditor.SelectionLength = 1
    127. Select Case btn.Name
    128. Case "btnBlack"
    129. txtEditor.SelectionColor = Color.Black
    130. Case "btnRed"
    131. txtEditor.SelectionColor = Color.Red
    132. Case "btnBlue"
    133. txtEditor.SelectionColor = Color.Blue
    134. Case "btnGreen"
    135. txtEditor.SelectionColor = Color.Green
    136. End Select
    137. Next
    138. Else
    139. ' Text ist nicht ausgewählt, ändere Farbe für den gesamten neuen Text
    140. txtEditor.SelectionStart = 0
    141. txtEditor.SelectionLength = txtEditor.Text.Length
    142. Select Case btn.Name
    143. Case "btnBlack"
    144. txtEditor.ForeColor = Color.Black
    145. Case "btnRed"
    146. txtEditor.ForeColor = Color.Red
    147. Case "btnBlue"
    148. txtEditor.SelectionColor = Color.Blue
    149. Case "btnGreen"
    150. txtEditor.SelectionColor = Color.Green
    151. End Select
    152. End If
    153. ' Wiederherstellen der vorherigen Auswahl
    154. txtEditor.Select(selectionStart, selectionLength)
    155. End Sub
    156. Private Sub AutomatischesSpeichernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AutomatischesSpeichernToolStripMenuItem.Click
    157. ' Toggle für automatisches Speichern
    158. autoSaveEnabled = Not autoSaveEnabled
    159. AutomatischesSpeichernToolStripMenuItem.Checked = autoSaveEnabled
    160. ' Wenn das automatische Speichern aktiviert ist, speichern Sie die aktuellen Einstellungen
    161. If autoSaveEnabled = True Then
    162. SaveSettings()
    163. End If
    164. End Sub
    165. Private Sub TxtEditor_DragDrop(sender As Object, e As DragEventArgs) Handles txtEditor.DragDrop
    166. If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    167. Dim files() As String = e.Data.GetData(DataFormats.FileDrop)
    168. If files IsNot Nothing AndAlso files.Length > 0 Then
    169. Dim filePath As String = files(0)
    170. Dim fileExtension As String = Path.GetExtension(filePath).ToLower()
    171. If File.Exists(filePath) AndAlso (fileExtension = ".txt" OrElse fileExtension = ".rtf") Then
    172. Try
    173. LoadFile(filePath, fileExtension)
    174. Catch ex As Exception
    175. MessageBox.Show("Fehler beim Laden der Datei: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    176. End Try
    177. Else
    178. MessageBox.Show("Es können nur Text- oder RTF-Dateien akzeptiert werden.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    179. End If
    180. End If
    181. End If
    182. End Sub
    183. Private Sub TxtEditor_TextChanged(sender As Object, e As EventArgs) Handles txtEditor.TextChanged
    184. ' Automatisches Speichern aktivieren, wenn es aktiviert ist und der Text geändert wurde
    185. If autoSaveEnabled Then
    186. SaveSettings()
    187. End If
    188. End Sub
    189. Private Sub BtnBold_Click(sender As Object, e As EventArgs) Handles btnBold.Click
    190. ApplyFontStyle(FontStyle.Bold, selectedColor)
    191. End Sub
    192. Private Sub BtnItalic_Click(sender As Object, e As EventArgs) Handles btnItalic.Click
    193. ApplyFontStyle(FontStyle.Italic, selectedColor)
    194. End Sub
    195. Private Sub BtnUnderline_Click(sender As Object, e As EventArgs) Handles btnUnderline.Click
    196. ApplyFontStyle(FontStyle.Underline, selectedColor)
    197. End Sub
    198. Private Sub ApplyFontStyle(fontStyle As FontStyle, color As Color)
    199. ' Speichern der aktuellen Auswahl
    200. Dim selectionStart As Integer = txtEditor.SelectionStart
    201. Dim selectionLength As Integer = txtEditor.SelectionLength
    202. Dim selectedText As String = txtEditor.SelectedText
    203. Dim originalFont As Font = txtEditor.SelectionFont
    204. Dim originalColor As Color = txtEditor.SelectionColor
    205. ' Anwenden der gewünschten Formatierung
    206. txtEditor.SelectionStart = selectionStart
    207. txtEditor.SelectionLength = selectionLength
    208. txtEditor.SelectionFont = New Font(originalFont, originalFont.Style Or fontStyle)
    209. txtEditor.SelectionColor = color
    210. ' Wiederherstellen der vorherigen Auswahl
    211. txtEditor.Select(selectionStart, selectionLength)
    212. txtEditor.SelectedText = selectedText
    213. txtEditor.Select(selectionStart, selectedText.Length)
    214. End Sub
    215. Private Sub NeuToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NeuToolStripMenuItem.Click
    216. Dim newForm As New Form1
    217. newForm.Show()
    218. End Sub
    219. Private Sub ÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ÖffnenToolStripMenuItem.Click
    220. OpenFileDialog1.Filter = "RTF-Dateien (*.rtf)|*.rtf|Textdateien (*.txt)|*.txt"
    221. If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
    222. Try
    223. If OpenFileDialog1.FileName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then
    224. ' Öffnen als TXT-Datei
    225. txtEditor.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText)
    226. ElseIf OpenFileDialog1.FileName.EndsWith(".rtf", StringComparison.OrdinalIgnoreCase) Then
    227. ' Öffnen als RTF-Datei
    228. txtEditor.LoadFile(OpenFileDialog1.FileName)
    229. Else
    230. MessageBox.Show("Das Dateiformat wird nicht unterstützt.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    231. End If
    232. Catch ex As Exception
    233. MessageBox.Show("Fehler beim Öffnen der Datei: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    234. End Try
    235. End If
    236. End Sub
    237. Private Sub SpeichernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SpeichernToolStripMenuItem.Click
    238. SaveFileDialog1.Filter = "RTF-Dateien (*.rtf)|*.rtf|Textdateien (*.txt)|*.txt"
    239. If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
    240. Dim filename As String = SaveFileDialog1.FileName
    241. If filename.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then
    242. ' Speichern als TXT-Datei
    243. txtEditor.SaveFile(filename, RichTextBoxStreamType.PlainText)
    244. Else
    245. ' Speichern als RTF-Datei
    246. txtEditor.SaveFile(filename, RichTextBoxStreamType.RichText)
    247. End If
    248. End If
    249. End Sub
    250. Private Sub SpeichernAlsRtf(filename As String)
    251. ' Speichern des RichTextBox-Inhalts im RTF-Format
    252. Dim rtfContent As String = ""
    253. For Each c As Char In txtEditor.Text
    254. Dim fontSize As Single = txtEditor.SelectionFont.Size
    255. rtfContent &= "{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Arial;}}" & vbCrLf
    256. rtfContent &= "{\colortbl ;" & ColorTranslator.ToHtml(txtEditor.SelectionColor) & ";}" & vbCrLf
    257. rtfContent &= "\viewkind4\uc1\pard\cf1\f0\fs" & CInt(fontSize * 2) & " " & c & vbCrLf
    258. Next
    259. File.WriteAllText(filename, rtfContent)
    260. End Sub
    261. Private Sub DruckenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DruckenToolStripMenuItem.Click
    262. Dim printDoc As New Printing.PrintDocument
    263. AddHandler printDoc.PrintPage, AddressOf PrintPageHandler
    264. Dim printDialog As New PrintDialog With {
    265. .Document = printDoc
    266. }
    267. If printDialog.ShowDialog() = DialogResult.OK Then
    268. printDoc.Print()
    269. End If
    270. End Sub
    271. Private Sub PrintPageHandler(sender As Object, e As Printing.PrintPageEventArgs)
    272. Dim printFont As New Font("Arial", 12)
    273. e.Graphics.DrawString(txtEditor.Text, printFont, Brushes.Black, New RectangleF(100, 100, e.MarginBounds.Width, e.MarginBounds.Height))
    274. End Sub
    275. Private Sub DesktopDoubleClickHandler(sender As Object, e As EventArgs)
    276. Dim desktopPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) ' Pfad zum Desktop
    277. Dim selectedFile As String = Path.Combine(desktopPath, "example.txt") ' Beispieldatei auf dem Desktop
    278. If File.Exists(selectedFile) Then
    279. LoadFileToRichTextBox(selectedFile)
    280. End If
    281. End Sub
    282. Private Sub LoadFileToRichTextBox(filePath As String)
    283. ' Dateiinhalt in die RichTextBox laden
    284. If File.Exists(filePath) Then
    285. Dim fileContent As String = File.ReadAllText(filePath)
    286. txtEditor.Rtf = fileContent ' Annahme: Die Datei enthält RTF-formatierten Text
    287. End If
    288. End Sub
    289. End Class


    Kann irgendwer mir sagen, welchen Code ich verwenden muss?

    *Topic verschoben, EXE-Anhang entfernt*
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @Thiemo1991 Mal sehen, ob ich Dich richtig verstanden habe:
    Du doppelklickst auf eine Datei, die auf dem Desktop liegt?
    Wenn ja:
    Weise der Extension dieser Datei Dein Programm als Standardprogramm zu (recher Mausklick auf die Datei => Öffnen mit ...).
    Wenn nein:
    Setze einen Halztepunkt in die Doppelklick-Prozedur und debugge sie:
    Debuggen, Fehler finden und beseitigen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Schaffst du es denn die Commandline-Argumente auszulesen? Da ist der Dateinahme der den Start des Programms ausgelöst hat drin, wenn dein Programm so gestartet wird. Befrag dazu deine KI, das sollte dir diese "dumme" KI verraten können. Hab das auch mal mit KI probiert, aber für mehr als Codegenerierung durch SpeechToText taugt das nicht wirklich viel.

    Beispiel: So kann man easy Coden:
    erstelle mit bitte eine C# klasse mit dem namen XReader mit folgenden privaten
    feldern vom Typ float: Hour, Minutes, Seconds. Folgende felder vom typ string name, place. Dazu bitte dann auch public properties mit getter und setter


    Falls dein Programm bereits läuft und du nicht willst das eine weitere Instanz gestartet wird, musst du eine Einzelinstanzanwendung machen.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DTF“ ()

    Wo machst du den Doppelklick? Auf die Datei?
    Das, wo du auf einen Doppelklick reagierst, ist wenn du den Doppelklick auf dem Form machst. Probier das mal aus.

    Wenn du per Doppelklick auf die Datei, diese durch dein Programm öffnen willst, machst du was Rod sagt und gibst ChatGPT das so nochmal durch:
    Ich habe eine Anwendung in VB.NET erstellt. Für den Dateityp .xyz habe ich auf meinem Betriebssystem meine Anwendung als Standardprogramm eingestellt, das diese öffnet. Mit der Methode:

    VB.NET-Quellcode

    1. Private Sub LoadFileToRichTextBox(filePath As String)
    2. ' Dateiinhalt in die RichTextBox laden
    3. If File.Exists(filePath) Then
    4. Dim fileContent As String = File.ReadAllText(filePath)
    5. txtEditor.Rtf = fileContent ' Annahme: Die Datei enthält RTF-formatierten Text
    6. End If
    7. End Sub

    wird der Inhalt der Datei in eine RichTextBox geladen. Rufe in meinem Programm beim Start diese Methode mit dem Pfad der angewählten Datei auf.


    Neben dem Geseier von GPT erhältst du als Antwort dann, was DTF vorschlägt:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. ' Prüfe, ob beim Start des Programms eine Datei als Argument übergeben wurde
    3. If My.Application.CommandLineArgs.Count > 0 Then
    4. ' Wenn ja, rufe LoadFileToRichTextBox mit dem Pfad der übergebenen Datei auf
    5. Dim filePath As String = My.Application.CommandLineArgs(0)
    6. LoadFileToRichTextBox(filePath)
    7. End If
    8. End Sub
    geprüft, ob das hinhaut hab ich nicht.
    Du doppelklickst auf eine Datei, die auf dem Desktop liegt?

    Nicht nur vom Desktop, werden ja Dateien geöffnet.

    Falls dein Programm bereits läuft und du nicht willst das eine weitere Instanz gestartet wird, musst du eine Einzelinstanzanwendung machen.

    Das möchte ich aber.

    Auf die Datei?

    Ja!



    @Haudruferzappeltnoch, deine Codes haben mein Proplem behoben. Danke dafür.

    Beiträge zusammengefügt. ~Thunderbolt



    Irgendwie, obwohl ich die zwei anderen Farben (also, schwarz und rot) wunderbar auswählen kann bzw. anwenden kann, bekomme ich das aber mit den Farben blau und grün nicht hin. ChatGPT kann mir auch nicht wirklich helfen.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Drawing.Text
    3. Public Class Form1
    4. Inherits Form ' Fügt die Form-Klasse hinzu, von der Ihre Klasse erbt
    5. ' Deklaration von Variablen und Initialisierung
    6. Private fontSizes As New List(Of Integer) From {8, 10, 11, 12, 14, 16, 18, 20}
    7. Private selectedColor As Color = Color.Black ' Standardfarbe ist Schwarz
    8. Private autoSaveEnabled As Boolean = False ' Variable für automatisches Speichern
    9. Private lastFilePath As String = "" ' Speichert den zuletzt überwachten Dateipfad
    10. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    11. ' Prüfe, ob beim Start des Programms eine Datei als Argument übergeben wurde
    12. If My.Application.CommandLineArgs.Count > 0 Then
    13. ' Wenn ja, rufe LoadFileToRichTextBox mit dem Pfad der übergebenen Datei auf
    14. Dim filePath As String = My.Application.CommandLineArgs(0)
    15. LoadFileToRichTextBox(filePath)
    16. End If
    17. ' Verknüpfen von Ereignishandlern
    18. AddHandler cmbFontSize.SelectedIndexChanged, AddressOf CmbFontSize_SelectedIndexChanged
    19. AddHandler cmbFontFamily.SelectedIndexChanged, AddressOf CmbFontFamily_SelectedIndexChanged
    20. AddHandler btnBlack.Click, AddressOf ColorButton_Click
    21. AddHandler btnRed.Click, AddressOf ColorButton_Click
    22. AddHandler btnBold.Click, AddressOf BtnBold_Click
    23. AddHandler btnItalic.Click, AddressOf BtnItalic_Click
    24. AddHandler btnUnderline.Click, AddressOf BtnUnderline_Click
    25. AddHandler Me.DoubleClick, AddressOf DesktopDoubleClickHandler
    26. ' Befüllen des Dropdown-Menüs mit den Schriftgrößen
    27. For Each fontSize As Integer In fontSizes
    28. cmbFontSize.Items.Add(fontSize)
    29. Next
    30. ' Festlegen der Standard-Schriftgröße
    31. cmbFontSize.SelectedIndex = 2
    32. ' Laden der installierten Schriftarten in die ComboBox
    33. Dim installedFonts As New InstalledFontCollection()
    34. For Each font As FontFamily In installedFonts.Families
    35. cmbFontFamily.Items.Add(font.Name)
    36. Next
    37. ' Hinzufügen des RichTextBox-Steuerelements
    38. With txtEditor
    39. .Multiline = True
    40. .AllowDrop = True
    41. End With
    42. Me.Controls.Add(txtEditor)
    43. ' Laden der gespeicherten Einstellungen beim Laden des Formulars
    44. LoadSettings()
    45. End Sub
    46. Private Sub LoadFile(filePath As String, fileExtension As String)
    47. Try
    48. If filePath.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then
    49. ' Öffnen als TXT-Datei
    50. txtEditor.LoadFile(filePath, RichTextBoxStreamType.PlainText)
    51. ElseIf filePath.EndsWith(".rtf", StringComparison.OrdinalIgnoreCase) Then
    52. ' Öffnen als RTF-Datei
    53. txtEditor.LoadFile(filePath)
    54. Else
    55. MessageBox.Show("Das Dateiformat wird nicht unterstützt.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    56. End If
    57. Catch ex As Exception
    58. MessageBox.Show("Fehler beim Öffnen der Datei: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    59. End Try
    60. End Sub
    61. Private Sub LoadSettings()
    62. ' Laden der zuletzt ausgewählten Schriftgröße aus den gespeicherten Einstellungen, falls gültig
    63. If My.Settings.FontSize >= 0 AndAlso My.Settings.FontSize < fontSizes.Count Then
    64. cmbFontSize.SelectedIndex = My.Settings.FontSize
    65. End If
    66. ' Laden der zuletzt ausgewählten Schriftart aus den gespeicherten Einstellungen, falls gültig
    67. If Not String.IsNullOrEmpty(My.Settings.SelectedFont) AndAlso cmbFontFamily.Items.Contains(My.Settings.SelectedFont) Then
    68. cmbFontFamily.SelectedItem = My.Settings.SelectedFont
    69. End If
    70. ' Laden der zuletzt ausgewählten Farbe aus den gespeicherten Einstellungen
    71. selectedColor = My.Settings.SelectedColor
    72. ' Laden des Status des automatischen Speicherns
    73. autoSaveEnabled = My.Settings.AutoSaveEnabled
    74. AutomatischesSpeichernToolStripMenuItem.Checked = autoSaveEnabled
    75. ' Laden des zuletzt geöffneten Textes aus den gespeicherten Einstellungen, wenn automatisches Speichern aktiviert ist
    76. If autoSaveEnabled AndAlso Not String.IsNullOrEmpty(My.Settings.LastText) Then
    77. txtEditor.Rtf = My.Settings.LastText
    78. End If
    79. End Sub
    80. Private Sub SaveSettings()
    81. ' Speichern der ausgewählten Schriftgröße in den Einstellungen
    82. My.Settings.FontSize = cmbFontSize.SelectedIndex
    83. ' Speichern der ausgewählten Schriftart in den Einstellungen
    84. My.Settings.SelectedFont = cmbFontFamily.SelectedItem.ToString()
    85. ' Speichern der ausgewählten Farbe in den Einstellungen
    86. My.Settings.SelectedColor = selectedColor
    87. ' Speichern des aktuellen Textes in den Einstellungen
    88. My.Settings.LastText = txtEditor.Rtf
    89. ' Speichern des Status des automatischen Speicherns
    90. My.Settings.AutoSaveEnabled = autoSaveEnabled
    91. ' Speichern der Einstellungen
    92. My.Settings.Save()
    93. End Sub
    94. Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    95. ' Speichern der Einstellungen beim Schließen des Formulars
    96. SaveSettings()
    97. End Sub
    98. Private Sub CmbFontFamily_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbFontFamily.SelectedIndexChanged
    99. ' Anwenden der ausgewählten Schriftart auf den Text
    100. If cmbFontFamily.SelectedIndex <> -1 Then
    101. Dim fontFamily As String = cmbFontFamily.SelectedItem.ToString()
    102. Dim currentFont As Font = txtEditor.SelectionFont
    103. Dim newFont As New Font(fontFamily, currentFont.Size, currentFont.Style)
    104. txtEditor.SelectionFont = newFont
    105. txtEditor.Focus()
    106. End If
    107. End Sub
    108. Private Sub CmbFontSize_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbFontSize.SelectedIndexChanged
    109. ' Speichern der aktuellen Auswahl
    110. Dim selectionStart As Integer = txtEditor.SelectionStart
    111. Dim selectionLength As Integer = txtEditor.SelectionLength
    112. Dim selectedText As String = txtEditor.SelectedText
    113. Dim originalFont As Font = txtEditor.SelectionFont
    114. Dim originalColor As Color = txtEditor.SelectionColor
    115. ' Ändern der Schriftgröße
    116. Dim selectedSize As Integer = fontSizes(cmbFontSize.SelectedIndex)
    117. txtEditor.SelectionFont = New Font("Arial", selectedSize)
    118. ' Wiederherstellen der vorherigen Auswahl
    119. txtEditor.Select(selectionStart, selectionLength)
    120. txtEditor.SelectedText = selectedText
    121. txtEditor.Select(selectionStart, selectedText.Length)
    122. End Sub
    123. Private Sub ColorButton_Click(sender As Object, e As EventArgs)
    124. Dim btn As Button = DirectCast(sender, Button)
    125. Dim selectionStart As Integer = txtEditor.SelectionStart
    126. Dim selectionLength As Integer = txtEditor.SelectionLength
    127. ' Überprüfen, ob Text ausgewählt ist
    128. If selectionLength > 0 Then
    129. ' Text ist ausgewählt, ändere Farbe des ausgewählten Textes zeichenweise
    130. For i As Integer = selectionStart To selectionStart + selectionLength - 1
    131. txtEditor.SelectionStart = i
    132. txtEditor.SelectionLength = 1
    133. Select Case btn.Name
    134. Case "btnBlack"
    135. txtEditor.SelectionColor = Color.Black
    136. Case "btnRed"
    137. txtEditor.SelectionColor = Color.Red
    138. Case "btnBlue"
    139. txtEditor.SelectionColor = Color.Blue
    140. Case "btnGreen"
    141. txtEditor.SelectionColor = Color.Green
    142. End Select
    143. Next
    144. Else
    145. ' Text ist nicht ausgewählt, ändere Farbe für den gesamten neuen Text
    146. txtEditor.SelectionStart = 0
    147. txtEditor.SelectionLength = txtEditor.Text.Length
    148. Select Case btn.Name
    149. Case "btnBlack"
    150. txtEditor.ForeColor = Color.Black
    151. Case "btnRed"
    152. txtEditor.ForeColor = Color.Red
    153. Case "btnBlue"
    154. txtEditor.SelectionColor = Color.Blue
    155. Case "btnGreen"
    156. txtEditor.SelectionColor = Color.Green
    157. End Select
    158. End If
    159. ' Wiederherstellen der vorherigen Auswahl
    160. txtEditor.Select(selectionStart, selectionLength)
    161. End Sub
    162. Private Sub AutomatischesSpeichernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AutomatischesSpeichernToolStripMenuItem.Click
    163. ' Toggle für automatisches Speichern
    164. autoSaveEnabled = Not autoSaveEnabled
    165. AutomatischesSpeichernToolStripMenuItem.Checked = autoSaveEnabled
    166. ' Wenn das automatische Speichern aktiviert ist, speichern Sie die aktuellen Einstellungen
    167. If autoSaveEnabled = True Then
    168. SaveSettings()
    169. End If
    170. End Sub
    171. Private Sub TxtEditor_DragDrop(sender As Object, e As DragEventArgs) Handles txtEditor.DragDrop
    172. If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    173. Dim files() As String = e.Data.GetData(DataFormats.FileDrop)
    174. If files IsNot Nothing AndAlso files.Length > 0 Then
    175. Dim filePath As String = files(0)
    176. Dim fileExtension As String = Path.GetExtension(filePath).ToLower()
    177. If File.Exists(filePath) AndAlso (fileExtension = ".txt" OrElse fileExtension = ".rtf") Then
    178. Try
    179. LoadFile(filePath, fileExtension)
    180. Catch ex As Exception
    181. MessageBox.Show("Fehler beim Laden der Datei: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    182. End Try
    183. Else
    184. MessageBox.Show("Es können nur Text- oder RTF-Dateien akzeptiert werden.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    185. End If
    186. End If
    187. End If
    188. End Sub
    189. Private Sub TxtEditor_TextChanged(sender As Object, e As EventArgs) Handles txtEditor.TextChanged
    190. ' Automatisches Speichern aktivieren, wenn es aktiviert ist und der Text geändert wurde
    191. If autoSaveEnabled Then
    192. SaveSettings()
    193. End If
    194. End Sub
    195. Private Sub BtnBold_Click(sender As Object, e As EventArgs) Handles btnBold.Click
    196. ApplyFontStyle(FontStyle.Bold, selectedColor)
    197. End Sub
    198. Private Sub BtnItalic_Click(sender As Object, e As EventArgs) Handles btnItalic.Click
    199. ApplyFontStyle(FontStyle.Italic, selectedColor)
    200. End Sub
    201. Private Sub BtnUnderline_Click(sender As Object, e As EventArgs) Handles btnUnderline.Click
    202. ApplyFontStyle(FontStyle.Underline, selectedColor)
    203. End Sub
    204. Private Sub ApplyFontStyle(fontStyle As FontStyle, color As Color)
    205. ' Speichern der aktuellen Auswahl
    206. Dim selectionStart As Integer = txtEditor.SelectionStart
    207. Dim selectionLength As Integer = txtEditor.SelectionLength
    208. Dim selectedText As String = txtEditor.SelectedText
    209. Dim originalFont As Font = txtEditor.SelectionFont
    210. Dim originalColor As Color = txtEditor.SelectionColor
    211. ' Anwenden der gewünschten Formatierung
    212. txtEditor.SelectionStart = selectionStart
    213. txtEditor.SelectionLength = selectionLength
    214. txtEditor.SelectionFont = New Font(originalFont, originalFont.Style Or fontStyle)
    215. txtEditor.SelectionColor = color
    216. ' Wiederherstellen der vorherigen Auswahl
    217. txtEditor.Select(selectionStart, selectionLength)
    218. txtEditor.SelectedText = selectedText
    219. txtEditor.Select(selectionStart, selectedText.Length)
    220. End Sub
    221. Private Sub NeuToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NeuToolStripMenuItem.Click
    222. Dim newForm As New Form1
    223. newForm.Show()
    224. End Sub
    225. Private Sub ÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ÖffnenToolStripMenuItem.Click
    226. OpenFileDialog1.Filter = "RTF-Dateien (*.rtf)|*.rtf|Textdateien (*.txt)|*.txt"
    227. If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
    228. Try
    229. If OpenFileDialog1.FileName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then
    230. ' Öffnen als TXT-Datei
    231. txtEditor.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText)
    232. ElseIf OpenFileDialog1.FileName.EndsWith(".rtf", StringComparison.OrdinalIgnoreCase) Then
    233. ' Öffnen als RTF-Datei
    234. txtEditor.LoadFile(OpenFileDialog1.FileName)
    235. Else
    236. MessageBox.Show("Das Dateiformat wird nicht unterstützt.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    237. End If
    238. Catch ex As Exception
    239. MessageBox.Show("Fehler beim Öffnen der Datei: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    240. End Try
    241. End If
    242. End Sub
    243. Private Sub SpeichernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SpeichernToolStripMenuItem.Click
    244. SaveFileDialog1.Filter = "RTF-Dateien (*.rtf)|*.rtf|Textdateien (*.txt)|*.txt"
    245. If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
    246. Dim filename As String = SaveFileDialog1.FileName
    247. If filename.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then
    248. ' Speichern als TXT-Datei
    249. txtEditor.SaveFile(filename, RichTextBoxStreamType.PlainText)
    250. Else
    251. ' Speichern als RTF-Datei
    252. txtEditor.SaveFile(filename, RichTextBoxStreamType.RichText)
    253. End If
    254. End If
    255. End Sub
    256. Private Sub SpeichernAlsRtf(filename As String)
    257. ' Speichern des RichTextBox-Inhalts im RTF-Format
    258. Dim rtfContent As String = ""
    259. For Each c As Char In txtEditor.Text
    260. Dim fontSize As Single = txtEditor.SelectionFont.Size
    261. rtfContent &= "{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Arial;}}" & vbCrLf
    262. rtfContent &= "{\colortbl ;" & ColorTranslator.ToHtml(txtEditor.SelectionColor) & ";}" & vbCrLf
    263. rtfContent &= "\viewkind4\uc1\pard\cf1\f0\fs" & CInt(fontSize * 2) & " " & c & vbCrLf
    264. Next
    265. File.WriteAllText(filename, rtfContent)
    266. End Sub
    267. Private Sub DruckenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DruckenToolStripMenuItem.Click
    268. Dim printDoc As New Printing.PrintDocument
    269. AddHandler printDoc.PrintPage, AddressOf PrintPageHandler
    270. Dim printDialog As New PrintDialog With {
    271. .Document = printDoc
    272. }
    273. If printDialog.ShowDialog() = DialogResult.OK Then
    274. printDoc.Print()
    275. End If
    276. End Sub
    277. Private Sub PrintPageHandler(sender As Object, e As Printing.PrintPageEventArgs)
    278. Dim printFont As New Font("Arial", 12)
    279. e.Graphics.DrawString(txtEditor.Text, printFont, Brushes.Black, New RectangleF(100, 100, e.MarginBounds.Width, e.MarginBounds.Height))
    280. End Sub
    281. Private Sub DesktopDoubleClickHandler(sender As Object, e As EventArgs)
    282. Dim desktopPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) ' Pfad zum Desktop
    283. Dim selectedFile As String = Path.Combine(desktopPath, "example.txt") ' Beispieldatei auf dem Desktop
    284. If File.Exists(selectedFile) Then
    285. LoadFileToRichTextBox(selectedFile)
    286. End If
    287. End Sub
    288. Private Sub LoadFileToRichTextBox(filePath As String)
    289. ' Dateiinhalt in die RichTextBox laden
    290. If File.Exists(filePath) Then
    291. Dim fileContent As String = File.ReadAllText(filePath)
    292. txtEditor.Rtf = fileContent
    293. End If
    294. End Sub
    295. End Class


    Könnt ihr mir bitte dabei helfen?

    Beiträge noch einmal zusammengefügt. ~Thunderbolt
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()

    Was hast du nie bekommen?

    Nur mal so nebenbei damit du weißt was ich meine, färbe mal die "Farb"Buttons entsprechend ein und ersetz mal deine ColorButton_Click hiermit

    VB.NET-Quellcode

    1. Private Sub ColorButton_Click(sender As Object, e As EventArgs) Handles btnBlack.Click, btnRed.Click, btnGreen.Click, btnBlue.Click
    2. If rtb.SelectionLength = 0 Then rtb.Select(0, rtb.Text.Length)
    3. rtb.SelectionColor = DirectCast(sender, Button).BackColor
    4. End Sub
    das AddHandler-Gedusel brauchst dann auch nicht mehr im Load Event
    Thiemo, nutze die KI mal anders. Anstatt in der Hoffnung Copy&Paste fertigen Code zu bekommen, lass dir von der KI die Grundlagen beibringen. Frag die KI gezielt nach bestimmten Wörtern. So hast du zumindest annähernd die Chance die Grundlagen zu lernen, denn die kannst du leider immer noch nicht. KI kann bei manchen Sachen helfen, ich hab ChatGPT ausgiebig getestet und kam zu der überzeugung das KIs noch Jahre brauchen werden um den Job eines vollwertigen Programmiers wirklich machen zu können. Aktuell kam man damit nur ein wenig Arbeitszeit sparen, oder sich kurz eine Info hohlen, bei der man nicht mal 100% sicher sein kann, das es timmt.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DTF“ ()

    Moin moin

    Ich muss zugeben, das ich es auch mal mit der "KI ChatGPT" versucht habe, weil es so oft hoch gelobt wurde. Gerade auf YouTube grassieren Videos nach dem Motto:
    "Ein vollwertiges Programm in einer Stunde mit ChatGPT"!

    Mein Fazit ist:
    Wenn man die Grundlagen nicht kennt und der KI nicht gezielt die "richtigen" Fragen stellt, kommt man damit kaum weiter!
    Meist produziert die KI unnütz langen und oft auch völlig unverständlichen Code und oft auch noch alten VB-Code.

    Wie @DTF schon schrieb, um sich mal eine schnelle Info zu holen ist es OK aber man muss diese Infos auch genau überprüfen, sonst kann es sein das man ewig nach Fehlern sucht, weil man der KI auf Richtigkeit vertraut hat.

    Was ich noch festgestellt habe ist:
    Bis man der KI die "richtig formulierte Frage" zu einem Problem geschrieben hat, ist man in den Foren suchen oft schneller bei einer Lösung.
    Wenn die KI das Problem nicht "versteht" kann man Stunden damit verbringen und kommt keinen Schritt weiter. Und wenn man die Grundlagen nicht kennt, kann man die Fragen auch nicht "richtig" formulieren.

    Was recht gut funktioniert ist: Wenn ich z.B. eine Methode geschrieben habe, welche dann nach Tests funktioniert und in mir wächst der Eindruck, das diese zu lang oder zu kompliziert geschrieben ist, die KI nach einer Korrektur / Kürzung zu fragen.
    Hier gibt die KI im Zuge von OOP / CleanCode usw dann doch recht gute Ansätze, welche man aber auch wieder überprüfen muss.

    Rote Farbe entfernt. ~Trade
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    Ich weiß nicht, warum ich einen Fehler sehe, wenn ich mein Programm als Administrator ausführe. Ich bekomme beim Speichern von der zuletzt verwendeten Schriftart diesen Fehler anzeigt, aber irgendwie funktioniert das Ausführen trotzdem.

    Spoiler anzeigen
    System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

    System.Windows.Forms.ComboBox.SelectedItem.get hat Nothing zurückgegeben.


    Hier ist mein kompletter Code dazu.

    Spoiler anzeigen

    Quellcode

    1. Imports System.IO
    2. Imports System.Drawing.Text
    3. Imports Microsoft.Win32
    4. Imports System.Runtime.InteropServices
    5. Imports System.Security.Principal
    6. Imports System.Security.Cryptography.X509Certificates
    7. Public Class TmEditor
    8. Inherits Form
    9. ' Private Felder
    10. Private fontSizes As New List(Of Integer) From {8, 10, 11, 12, 14, 16, 18, 20}
    11. Private selectedColor As Color = Color.Black
    12. Private autoSaveEnabled As Boolean = False
    13. Private lastFilePath As String = ""
    14. Private WithEvents AutoSaveTimer As New Timer()
    15. Private WithEvents HighlightTimer As New Timer()
    16. Private Const IconPath As String = "Resources\texteditor.ico"
    17. Private lastTextBeforeSave As String
    18. ' Importieren der SHChangeNotify-Funktion aus der Shell32.dll
    19. <DllImport("Shell32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
    20. Private Shared Function SHChangeNotify(ByVal wEventId As Integer, ByVal uFlags As Integer, ByVal dwItem1 As IntPtr, ByVal dwItem2 As IntPtr) As Boolean
    21. End Function
    22. Public Sub New()
    23. InitializeComponent()
    24. AddHandler TxtEditor.KeyDown, AddressOf TxtEditor_KeyDown
    25. End Sub
    26. ' Ereignishandler verknüpfen
    27. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    28. ' Dateizuordnung registrieren und Administratorrechte überprüfen
    29. RegisterFileAssociation()
    30. RestartAsAdmin()
    31. ' Dateizuordnung registrieren
    32. RegisterFileAssociation()
    33. ' Schriftgrößen zur Dropdown-Liste hinzufügen
    34. For Each fontSize As Integer In fontSizes
    35. cmbFontSize.Items.Add(fontSize)
    36. Next
    37. ' Installierte Schriftarten in ComboBox laden
    38. Dim installedFonts As New InstalledFontCollection()
    39. For Each font As FontFamily In installedFonts.Families
    40. cmbFontFamily.Items.Add(font.Name)
    41. Next
    42. ' Ereignishandler verknüpfen
    43. AddHandler cmbFontSize.SelectedIndexChanged, AddressOf CmbFontSize_SelectedIndexChanged
    44. AddHandler cmbFontFamily.SelectedIndexChanged, AddressOf CmbFontFamily_SelectedIndexChanged
    45. AddHandler btnBlack.Click, AddressOf ColorButton_Click
    46. AddHandler btnRed.Click, AddressOf ColorButton_Click
    47. AddHandler btnBlue.Click, AddressOf ColorButton_Click
    48. AddHandler btnGreen.Click, AddressOf ColorButton_Click
    49. AddHandler btnBold.Click, AddressOf BtnBold_Click
    50. AddHandler btnItalic.Click, AddressOf BtnItalic_Click
    51. AddHandler btnUnderline.Click, AddressOf BtnUnderline_Click
    52. AddHandler Me.FormClosing, AddressOf TmEditor_FormClosing
    53. AddHandler AutoSaveTimer.Tick, AddressOf AutoSaveTimer_Tick
    54. AddHandler HighlightTimer.Tick, AddressOf HighlightTimer_Tick
    55. AddHandler TxtEditor.KeyDown, AddressOf TxtEditor_KeyDown ' KeyDown-Ereignishandler hinzufügen
    56. ' Schriftgröße und Schriftart standardmäßig auswählen
    57. cmbFontSize.SelectedIndex = 3 ' Standardgröße: 12
    58. cmbFontFamily.SelectedItem = "Arial" ' Standardschriftart: Arial
    59. ' Eigenschaften setzen
    60. With TxtEditor
    61. .Multiline = True
    62. .AllowDrop = True
    63. ' Standard-Schriftgröße und Schriftart festlegen
    64. .Font = New Font(cmbFontFamily.SelectedItem.ToString(), CInt(cmbFontSize.SelectedItem), FontStyle.Regular)
    65. End With
    66. ' RichTextBox dem Formular hinzufügen
    67. Me.Controls.Add(TxtEditor)
    68. ' Gespeicherte Einstellungen laden
    69. LoadSettings()
    70. ' AutoSave Timer konfigurieren
    71. AutoSaveTimer.Interval = 60000 ' 1 Minute
    72. AutoSaveTimer.Start()
    73. ' Highlight Timer konfigurieren
    74. HighlightTimer.Interval = 5000 ' 5 Sekunden
    75. End Sub
    76. ' Dateiformat registrieren
    77. Private Sub RegisterFileAssociation()
    78. Dim progId As String = "tmEditor.File"
    79. Dim appName As String = "TM Editor"
    80. Dim fileExtension As String = ".tmEditor"
    81. Try
    82. ' Nur registrieren, wenn das Programm als Administrator ausgeführt wird
    83. If IsRunAsAdmin() Then
    84. ' Registrieren des Dateityps
    85. Using key As RegistryKey = Registry.ClassesRoot.CreateSubKey(fileExtension)
    86. key.SetValue("", progId)
    87. End Using
    88. Using key As RegistryKey = Registry.ClassesRoot.CreateSubKey(progId)
    89. key.SetValue("", appName)
    90. Using iconKey As RegistryKey = key.CreateSubKey("DefaultIcon")
    91. iconKey.SetValue("", IconPath)
    92. End Using
    93. Using shellKey As RegistryKey = key.CreateSubKey("shell\open\command")
    94. shellKey.SetValue("", """" & Application.ExecutablePath & """ ""%1""")
    95. End Using
    96. End Using
    97. Else
    98. ' Meldung anzeigen, dass die Dateizuordnung nicht aktualisiert werden kann
    99. ToolStripLabel1.Text = "Dateizuordnung kann nicht aktualisiert werden: Administratorrechte erforderlich."
    100. End If
    101. ' Aktualisieren des Windows Explorers
    102. SHChangeNotify(&H8000000, &H0, IntPtr.Zero, IntPtr.Zero)
    103. ' Benachrichtigung anzeigen
    104. ToolStripLabel1.Text = "Dateizuordnung aktualisiert."
    105. Catch ex As Exception
    106. MessageBox.Show("Fehler beim Aktualisieren der Dateizuordnung: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    107. ToolStripLabel1.Text = "Fehler beim Aktualisieren der Dateizuordnung."
    108. End Try
    109. End Sub
    110. Private Sub TmEditor_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    111. ' Timer deaktivieren
    112. AutoSaveTimer.Stop()
    113. HighlightTimer.Stop()
    114. ' Speichern von Einstellungen und Daten
    115. SaveSettings()
    116. ' Anwendung beenden
    117. Application.Exit()
    118. End Sub
    119. Private Sub AutoSaveTimer_Tick(sender As Object, e As EventArgs) Handles AutoSaveTimer.Tick
    120. If autoSaveEnabled AndAlso TxtEditor.Rtf <> lastTextBeforeSave Then
    121. SaveTextToFile(lastFilePath)
    122. lastTextBeforeSave = TxtEditor.Rtf
    123. End If
    124. End Sub
    125. Private Sub HighlightTimer_Tick(sender As Object, e As EventArgs) Handles HighlightTimer.Tick
    126. RemoveHighlightColor(RichTextBoxFinds.None)
    127. End Sub
    128. Private Sub LoadSettings()
    129. ' Zuletzt ausgewählte Schriftgröße laden
    130. If My.Settings.FontSize >= 0 AndAlso My.Settings.FontSize < fontSizes.Count Then
    131. cmbFontSize.SelectedIndex = My.Settings.FontSize
    132. End If
    133. ' Zuletzt ausgewählte Schriftart laden
    134. If Not String.IsNullOrEmpty(My.Settings.SelectedFont) AndAlso cmbFontFamily.Items.Contains(My.Settings.SelectedFont) Then
    135. cmbFontFamily.SelectedItem = My.Settings.SelectedFont
    136. End If
    137. ' Zuletzt ausgewählte Farbe laden
    138. selectedColor = My.Settings.SelectedColor
    139. ' Status des automatischen Speicherns laden
    140. autoSaveEnabled = My.Settings.AutoSaveEnabled
    141. SpeichenAutomatischToolStripMenuItem.Checked = autoSaveEnabled
    142. ' Zuletzt geöffneten Text laden, wenn automatisches Speichern aktiviert ist
    143. If autoSaveEnabled AndAlso Not String.IsNullOrEmpty(My.Settings.LastText) Then
    144. TxtEditor.Rtf = My.Settings.LastText
    145. End If
    146. ' Zuletzt geöffneten Pfad laden
    147. lastFilePath = My.Settings.LastFilePath
    148. End Sub
    149. Private Sub SaveSettings()
    150. ' Zuletzt ausgewählte Schriftgröße speichern
    151. My.Settings.FontSize = cmbFontSize.SelectedIndex
    152. ' Zuletzt ausgewählte Schriftart speichern
    153. My.Settings.SelectedFont = cmbFontFamily.SelectedItem.ToString()
    154. ' Zuletzt ausgewählte Farbe speichern
    155. My.Settings.SelectedColor = selectedColor
    156. ' Status des automatischen Speicherns speichern
    157. My.Settings.AutoSaveEnabled = autoSaveEnabled
    158. ' Zuletzt geöffneten Text speichern, wenn automatisches Speichern aktiviert ist
    159. If autoSaveEnabled Then
    160. My.Settings.LastText = TxtEditor.Rtf
    161. End If
    162. ' Zuletzt geöffneten Pfad speichern
    163. My.Settings.LastFilePath = lastFilePath
    164. ' Einstellungen speichern
    165. My.Settings.Save()
    166. End Sub
    167. Private Sub CmbFontSize_SelectedIndexChanged(sender As Object, e As EventArgs)
    168. ' Schriftgröße ändern
    169. If cmbFontSize.SelectedIndex >= 0 AndAlso cmbFontSize.SelectedIndex < fontSizes.Count Then
    170. Dim newSize As Integer = fontSizes(cmbFontSize.SelectedIndex)
    171. TxtEditor.SelectionFont = New Font(TxtEditor.SelectionFont.FontFamily, newSize, TxtEditor.SelectionFont.Style)
    172. End If
    173. End Sub
    174. Private Sub CmbFontFamily_SelectedIndexChanged(sender As Object, e As EventArgs)
    175. ' Schriftart ändern
    176. If cmbFontFamily.SelectedItem IsNot Nothing Then
    177. Dim newFont As String = cmbFontFamily.SelectedItem.ToString()
    178. TxtEditor.SelectionFont = New Font(newFont, TxtEditor.SelectionFont.Size, TxtEditor.SelectionFont.Style)
    179. End If
    180. End Sub
    181. Private Sub ColorButton_Click(sender As Object, e As EventArgs)
    182. ' Schriftfarbe ändern
    183. Dim btn As Button = DirectCast(sender, Button)
    184. Select Case btn.Name
    185. Case "btnBlack"
    186. selectedColor = Color.Black
    187. Case "btnRed"
    188. selectedColor = Color.Red
    189. Case "btnBlue"
    190. selectedColor = Color.Blue
    191. Case "btnGreen"
    192. selectedColor = Color.Green
    193. End Select
    194. TxtEditor.SelectionColor = selectedColor
    195. End Sub
    196. Private Sub BtnBold_Click(sender As Object, e As EventArgs)
    197. ' Fettstil ändern
    198. If TxtEditor.SelectionFont IsNot Nothing Then
    199. Dim currentFont As Font = TxtEditor.SelectionFont
    200. Dim newFontStyle As FontStyle = If(currentFont.Bold, currentFont.Style Xor FontStyle.Bold, currentFont.Style Or FontStyle.Bold)
    201. TxtEditor.SelectionFont = New Font(currentFont.FontFamily, currentFont.Size, newFontStyle)
    202. End If
    203. End Sub
    204. Private Sub BtnItalic_Click(sender As Object, e As EventArgs)
    205. ' Kursivstil ändern
    206. If TxtEditor.SelectionFont IsNot Nothing Then
    207. Dim currentFont As Font = TxtEditor.SelectionFont
    208. Dim newFontStyle As FontStyle = If(currentFont.Italic, currentFont.Style Xor FontStyle.Italic, currentFont.Style Or FontStyle.Italic)
    209. TxtEditor.SelectionFont = New Font(currentFont.FontFamily, currentFont.Size, newFontStyle)
    210. End If
    211. End Sub
    212. Private Sub BtnUnderline_Click(sender As Object, e As EventArgs)
    213. ' Unterstrichenstil ändern
    214. If TxtEditor.SelectionFont IsNot Nothing Then
    215. Dim currentFont As Font = TxtEditor.SelectionFont
    216. Dim newFontStyle As FontStyle = If(currentFont.Underline, currentFont.Style Xor FontStyle.Underline, currentFont.Style Or FontStyle.Underline)
    217. TxtEditor.SelectionFont = New Font(currentFont.FontFamily, currentFont.Size, newFontStyle)
    218. End If
    219. End Sub
    220. Private Sub RemoveHighlightColor(richTextBoxFinds As RichTextBoxFinds)
    221. ' Alle markierten Textstellen ohne Hervorhebungsfarbe zurücksetzen
    222. Dim startPosition As Integer = 0
    223. While True
    224. Dim indexOfStart As Integer = TxtEditor.Find("^[A-Za-z0-9äöüÄÖÜß]+$", startPosition, richTextBoxFinds)
    225. If indexOfStart < 0 Then Exit While
    226. TxtEditor.SelectionStart = indexOfStart
    227. TxtEditor.SelectionLength = 0
    228. TxtEditor.SelectionColor = Color.Black
    229. startPosition = indexOfStart + 1
    230. End While
    231. End Sub
    232. Private Sub SpeichernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SpeichernToolStripMenuItem1.Click
    233. Dim saveDialog As New SaveFileDialog With {
    234. .Filter = "RTF-Dateien (*.rtf)|*.rtf|Textdateien (*.txt)|*.txt"
    235. }
    236. If IsRunAsAdmin() Then
    237. saveDialog.Filter &= "|TM Editor-Dateien (*.tmEditor)|*.tmEditor"
    238. End If
    239. If saveDialog.ShowDialog() = DialogResult.OK Then
    240. lastFilePath = saveDialog.FileName
    241. SaveTextToFile(lastFilePath)
    242. Me.Text = Path.GetFileName(lastFilePath) & " - TmEditor"
    243. ToolStripLabel1.Text = "Dokument wurde gespeichert."
    244. End If
    245. End Sub
    246. Private Sub ÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ÖffnenToolStripMenuItem1.Click
    247. OpenFileDialog1.Filter = "TM Editor-Dateien (*.tmEditor)|*.tmEditor|RTF-Dateien (*.rtf)|*.rtf|Textdateien (*.txt)|*.txt"
    248. If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
    249. lastFilePath = OpenFileDialog1.FileName
    250. Try
    251. If OpenFileDialog1.FileName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then
    252. TxtEditor.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText)
    253. ElseIf OpenFileDialog1.FileName.EndsWith(".rtf", StringComparison.OrdinalIgnoreCase) Then
    254. TxtEditor.LoadFile(OpenFileDialog1.FileName)
    255. ElseIf OpenFileDialog1.FileName.EndsWith(".tmEditor", StringComparison.OrdinalIgnoreCase) Then
    256. TxtEditor.LoadFile(OpenFileDialog1.FileName)
    257. Else
    258. MessageBox.Show("Das Dateiformat wird nicht unterstützt.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    259. End If
    260. Me.Text = Path.GetFileName(lastFilePath) & " - TmEditor"
    261. ToolStripLabel1.Text = "Dokument wurde geöffnet."
    262. Catch ex As Exception
    263. MessageBox.Show("Fehler beim Öffnen der Datei: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    264. ToolStripLabel1.Text = "Fehler beim Öffnen der Datei."
    265. End Try
    266. End If
    267. End Sub
    268. Private Sub BildAusDateiToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BildAusDateiToolStripMenuItem.Click
    269. Dim openFileDialog As New OpenFileDialog With {
    270. .Filter = "Bilddateien|*.bmp;*.jpg;*.jpeg;*.gif;*.png",
    271. .Title = "Bild auswählen"
    272. }
    273. If openFileDialog.ShowDialog() = DialogResult.OK Then
    274. Dim imagePath As String = openFileDialog.FileName
    275. InsertImage(imagePath)
    276. ' Status-Text anzeigen
    277. ToolStripLabel1.Text = "Bild wurde eingefügt."
    278. End If
    279. End Sub
    280. Private Sub InsertImage(imagePath As String)
    281. Try
    282. Dim originalImage As Image = Image.FromFile(imagePath)
    283. Dim scaleFactor As Single = 0.5 ' Skalierungsfaktor (0.5 bedeutet 50% der Originalgröße)
    284. Dim scaledWidth As Integer = CInt(originalImage.Width * scaleFactor)
    285. Dim scaledHeight As Integer = CInt(originalImage.Height * scaleFactor)
    286. Dim scaledImage As Image = originalImage.GetThumbnailImage(scaledWidth, scaledHeight, Nothing, IntPtr.Zero)
    287. Clipboard.SetDataObject(scaledImage)
    288. ' Bild einfügen
    289. TxtEditor.Paste(DataFormats.GetFormat(DataFormats.Bitmap))
    290. ' Markierten Text löschen und neuen Zeilenumbruch einfügen
    291. TxtEditor.SelectedText = ""
    292. TxtEditor.SelectedRtf = "{\rtf1\par}"
    293. Catch ex As Exception
    294. MessageBox.Show("Fehler beim Einfügen des Bildes: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    295. End Try
    296. End Sub
    297. Private Sub SpeichenAutomatischToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SpeichenAutomatischToolStripMenuItem.Click
    298. autoSaveEnabled = Not autoSaveEnabled
    299. SpeichenAutomatischToolStripMenuItem.Checked = autoSaveEnabled
    300. ' Status-Text anzeigen
    301. If autoSaveEnabled Then
    302. ToolStripLabel1.Text = "Automatisches Speichern aktiviert."
    303. lastTextBeforeSave = TxtEditor.Rtf
    304. Else
    305. ToolStripLabel1.Text = "Automatisches Speichern deaktiviert."
    306. End If
    307. End Sub
    308. Private Sub SaveTextToFile(filePath As String)
    309. If Not String.IsNullOrEmpty(filePath) Then
    310. Try
    311. If filePath.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then
    312. ' Speichern als TXT-Datei
    313. TxtEditor.SaveFile(filePath, RichTextBoxStreamType.PlainText)
    314. ElseIf filePath.EndsWith(".rtf", StringComparison.OrdinalIgnoreCase) Then
    315. ' Speichern als RTF-Datei
    316. TxtEditor.SaveFile(filePath)
    317. ElseIf filePath.EndsWith(".tmEditor", StringComparison.OrdinalIgnoreCase) Then
    318. ' Speichern als TM Editor-Datei
    319. TxtEditor.SaveFile(filePath)
    320. Else
    321. MessageBox.Show("Das Dateiformat wird nicht unterstützt.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    322. ' Status-Text anzeigen
    323. ToolStripLabel1.Text = "Speichern fehlgeschlagen: Nicht unterstütztes Dateiformat."
    324. Exit Sub
    325. End If
    326. ' Status-Text anzeigen
    327. ToolStripLabel1.Text = "Dokument wurde gespeichert."
    328. Catch ex As Exception
    329. MessageBox.Show("Fehler beim Speichern der Datei: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    330. ' Status-Text anzeigen
    331. ToolStripLabel1.Text = "Speichern fehlgeschlagen."
    332. End Try
    333. Else
    334. SpeichernToolStripMenuItem_Click(Nothing, Nothing)
    335. End If
    336. End Sub
    337. Private Sub NewDocument()
    338. TxtEditor.Clear()
    339. End Sub
    340. Private Sub NeuToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NeuToolStripMenuItem1.Click
    341. ' Neues Dokument erstellen
    342. NewDocument()
    343. ' Status-Text anzeigen
    344. ToolStripLabel1.Text = "Neues Dokument wurde erstellt."
    345. End Sub
    346. Private Function IsRunAsAdmin() As Boolean
    347. ' Überprüfen, ob das Programm mit Administratorrechten ausgeführt wird
    348. Dim identity As WindowsIdentity = WindowsIdentity.GetCurrent()
    349. Dim principal As New WindowsPrincipal(identity)
    350. Return principal.IsInRole(WindowsBuiltInRole.Administrator)
    351. End Function
    352. Private Sub RestartAsAdmin()
    353. ' Überprüfen, ob das Programm bereits mit Administratorrechten ausgeführt wird
    354. If Not IsRunAsAdmin() Then
    355. ' Meldung anzeigen, um Benutzer zu fragen, ob das Programm als Administrator neu gestartet werden soll
    356. Dim result As DialogResult = MessageBox.Show("Möchten Sie das Programm als Administrator neu starten?", "Administratorrechte erforderlich", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    357. If result = DialogResult.Yes Then
    358. ' Programm neu starten und als Administrator ausführen
    359. Dim startInfo As New ProcessStartInfo() With {
    360. .UseShellExecute = True,
    361. .WorkingDirectory = Environment.CurrentDirectory,
    362. .FileName = Application.ExecutablePath,
    363. .Verb = "runas"
    364. }
    365. Try
    366. ' Neustart als Administrator
    367. Process.Start(startInfo)
    368. ' Anwendung beenden
    369. Application.Exit()
    370. Return
    371. Catch ex As Exception
    372. ' Fehlermeldung anzeigen, wenn der Neustart als Administrator fehlschlägt
    373. MessageBox.Show("Fehler beim Starten des Programms als Administrator: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    374. End Try
    375. End If
    376. End If
    377. End Sub
    378. Private Sub TbZoomIn_Click(sender As Object, e As EventArgs) Handles tbZoomIn.Click
    379. If TxtEditor.ZoomFactor = 63 Then
    380. Exit Sub
    381. Else
    382. TxtEditor.ZoomFactor = TxtEditor.ZoomFactor + 1
    383. End If
    384. End Sub
    385. Private Sub TbZoomOut_Click(sender As Object, e As EventArgs) Handles tbZoomOut.Click
    386. If TxtEditor.ZoomFactor = 1 Then
    387. Exit Sub
    388. Else
    389. TxtEditor.ZoomFactor = TxtEditor.ZoomFactor - 1
    390. End If
    391. End Sub
    392. ' Ereignishandler für Tastatureingaben hinzufügen
    393. Private Sub TxtEditor_KeyDown(sender As Object, e As KeyEventArgs)
    394. If e.Control Then
    395. If e.KeyCode = Keys.Oemplus Then
    396. TbZoomIn_Click(Nothing, Nothing)
    397. ElseIf e.KeyCode = Keys.OemMinus Then
    398. TbZoomOut_Click(Nothing, Nothing)
    399. End If
    400. End If
    401. lblCharacterCount.Text = "Zeichenanzahl: " & TxtEditor.TextLength.ToString()
    402. End Sub
    403. Private Sub BtnJustify_Click(sender As Object, e As EventArgs) Handles btnJustify.Click
    404. TxtEditor.SelectionAlignment = HorizontalAlignment.Left
    405. End Sub
    406. Private Sub BtnCenterAlign_Click(sender As Object, e As EventArgs) Handles btnCenterAlign.Click
    407. TxtEditor.SelectionAlignment = HorizontalAlignment.Center
    408. End Sub
    409. Private Sub BtnRightAlign_Click(sender As Object, e As EventArgs) Handles btnRightAlign.Click
    410. TxtEditor.SelectionAlignment = HorizontalAlignment.Right
    411. End Sub
    412. End Class
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thiemo1991“ ()

    @Thiemo1991 In welcher Zeile Deines Codes kommt die Exception?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Zeile 181 ist eine Kommentarzeile.
    Setz da mal einen Haltepunkt drauf und überzeuge Dich davon, dass in den Variablen die richtigen Werte drin stehen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!