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.

    Ich habe bereits den Code, wie bisher auch, nochmal verändert. Ich habe nun ein Problem und zwar, irgendwie funktioniert das Wörterbuch (das aus einer Textdatei besteht) nicht.

    Spoiler anzeigen

    Quellcode

    1. Imports System.IO
    2. Imports System.Drawing.Text
    3. Imports Microsoft.Win32
    4. Imports System.Runtime.InteropServices
    5. Imports System.Text.RegularExpressions
    6. Imports System.Diagnostics
    7. <DebuggerDisplay("{GetDebuggerDisplay(),nq}")>
    8. Public Class TmEditor
    9. Inherits Form
    10. ' Private Felder
    11. Private fontSizes As New List(Of Integer) From {8, 10, 11, 12, 14, 16, 18, 20}
    12. Private selectedColor As Color = Color.Black
    13. Private autoSaveEnabled As Boolean = False
    14. Private lastFilePath As String = ""
    15. Private WithEvents AutoSaveTimer As New Timer()
    16. Private WithEvents HighlightTimer As New Timer()
    17. Private Const IconPath As String = "Resources\texteditor.ico"
    18. Private lastTextBeforeSave As String
    19. Private Wörterbuch As New Dictionary(Of String, String)()
    20. ' Importieren der SHChangeNotify-Funktion aus der Shell32.dll
    21. <DllImport("Shell32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
    22. Private Shared Function SHChangeNotify(ByVal wEventId As Integer, ByVal uFlags As Integer, ByVal dwItem1 As IntPtr, ByVal dwItem2 As IntPtr) As Boolean
    23. End Function
    24. Public Sub New()
    25. InitializeComponent()
    26. AddHandler TxtEditor.KeyDown, AddressOf TxtEditor_KeyDown
    27. End Sub
    28. ' Methode zum Lesen der Wörter aus einer Wörterbuchdatei
    29. Private Sub LeseWörterbuchAusDatei(wörterbuchDateiPfad As String)
    30. If File.Exists(wörterbuchDateiPfad) Then
    31. Dim wörter As String() = File.ReadAllLines(wörterbuchDateiPfad)
    32. For Each wort In wörter
    33. If Not Wörterbuch.ContainsKey(wort.ToLower()) Then
    34. Wörterbuch.Add(wort.ToLower(), Nothing)
    35. End If
    36. Next
    37. Else
    38. MessageBox.Show("Die Wörterbuchdatei wurde nicht gefunden.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    39. End If
    40. End Sub
    41. ' Methode zum Überprüfen der Rechtschreibung
    42. Private Sub ÜberprüfeRechtschreibung()
    43. Dim text As String = TxtEditor.Text
    44. Dim wörter As String() = text.Split({" "c, vbLf, vbCr, vbTab, ".", ",", ";", ":", "!", "?"}, StringSplitOptions.RemoveEmptyEntries)
    45. For Each wort In wörter
    46. If Not Wörterbuch.ContainsKey(wort.ToLower()) Then
    47. Dim startIndex As Integer = TxtEditor.Find(wort, RichTextBoxFinds.WholeWord)
    48. While startIndex >= 0
    49. TxtEditor.Select(startIndex, wort.Length)
    50. TxtEditor.SelectionBackColor = Color.Yellow ' Markiere das Wort
    51. startIndex = TxtEditor.Find(wort, startIndex + wort.Length, RichTextBoxFinds.WholeWord)
    52. End While
    53. End If
    54. Next
    55. TxtEditor.DeselectAll()
    56. End Sub
    57. ' Methode zum Markieren von Hyperlinks
    58. Private Sub MarkiereHyperlinks()
    59. Dim regex As New Regex("\b(?:https?://|www\.)\S+\b", RegexOptions.IgnoreCase)
    60. Dim matches As MatchCollection = regex.Matches(TxtEditor.Text)
    61. For Each match As Match In matches
    62. TxtEditor.Select(match.Index, match.Length)
    63. TxtEditor.SelectionColor = Color.Blue
    64. TxtEditor.SelectionFont = New Font(TxtEditor.SelectionFont, FontStyle.Underline)
    65. TxtEditor.Select(TxtEditor.TextLength, 0)
    66. Next
    67. TxtEditor.DeselectAll()
    68. End Sub
    69. ' Ereignishandler für Link-Klicks
    70. Private Sub TxtEditor_LinkClicked(sender As Object, e As LinkClickedEventArgs) Handles TxtEditor.LinkClicked
    71. Process.Start(e.LinkText)
    72. End Sub
    73. ' Ereignishandler verknüpfen
    74. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    75. ' Schriftgrößen zur Dropdown-Liste hinzufügen
    76. For Each fontSize As Integer In fontSizes
    77. cmbFontSize.Items.Add(fontSize)
    78. Next
    79. ' Installierte Schriftarten in ComboBox laden
    80. Dim installedFonts As New InstalledFontCollection()
    81. For Each font As FontFamily In installedFonts.Families
    82. cmbFontFamily.Items.Add(font.Name)
    83. Next
    84. ' Ereignishandler verknüpfen
    85. AddHandler cmbFontSize.SelectedIndexChanged, AddressOf CmbFontSize_SelectedIndexChanged
    86. AddHandler cmbFontFamily.SelectedIndexChanged, AddressOf CmbFontFamily_SelectedIndexChanged
    87. AddHandler btnBlack.Click, AddressOf ColorButton_Click
    88. AddHandler btnRed.Click, AddressOf ColorButton_Click
    89. AddHandler btnBlue.Click, AddressOf ColorButton_Click
    90. AddHandler btnGreen.Click, AddressOf ColorButton_Click
    91. AddHandler btnBold.Click, AddressOf BtnBold_Click
    92. AddHandler btnItalic.Click, AddressOf BtnItalic_Click
    93. AddHandler btnUnderline.Click, AddressOf BtnUnderline_Click
    94. AddHandler Me.FormClosing, AddressOf TmEditor_FormClosing
    95. AddHandler AutoSaveTimer.Tick, AddressOf AutoSaveTimer_Tick
    96. AddHandler HighlightTimer.Tick, AddressOf HighlightTimer_Tick
    97. AddHandler TxtEditor.KeyDown, AddressOf TxtEditor_KeyDown ' KeyDown-Ereignishandler hinzufügen
    98. ' Ereignishandler für Textänderungen und Link-Klicks
    99. AddHandler TxtEditor.TextChanged, AddressOf TxtEditor_TextChanged
    100. AddHandler TxtEditor.LinkClicked, AddressOf TxtEditor_LinkClicked
    101. ' Schriftgröße und Schriftart standardmäßig auswählen
    102. cmbFontSize.SelectedIndex = 3 ' Standardgröße: 12
    103. cmbFontFamily.SelectedItem = "Arial" ' Standardschriftart: Arial
    104. ' Eigenschaften setzen
    105. With TxtEditor
    106. .Multiline = True
    107. .AllowDrop = True
    108. ' Standard-Schriftgröße und Schriftart festlegen
    109. .Font = New Font(cmbFontFamily.SelectedItem.ToString(), CInt(cmbFontSize.SelectedItem), FontStyle.Regular)
    110. End With
    111. ' RichTextBox dem Formular hinzufügen
    112. Me.Controls.Add(TxtEditor)
    113. ' Gespeicherte Einstellungen laden
    114. LoadSettings()
    115. ' Highlight Timer konfigurieren
    116. HighlightTimer.Interval = 5000 ' 5 Sekunden
    117. ' Prüfe, ob beim Start des Programms eine Datei als Argument übergeben wurde
    118. If My.Application.CommandLineArgs.Count > 0 Then
    119. ' Wenn ja, rufe LoadFileToRichTextBox mit dem Pfad der übergebenen Datei auf
    120. Dim filePath As String = My.Application.CommandLineArgs(0)
    121. LoadFileToRichTextBox(filePath)
    122. End If
    123. SetProgramIcon()
    124. ' Wörterbuch aus Datei laden
    125. Dim wörterbuchDateiPfad As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources", "de_DE.txt")
    126. ' Debug-Ausgabe des Pfads zur Laufzeit
    127. MessageBox.Show("Verwendeter Pfad zur Wörterbuchdatei: " & wörterbuchDateiPfad, "Debug-Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
    128. If File.Exists(wörterbuchDateiPfad) Then
    129. LeseWörterbuchAusDatei(wörterbuchDateiPfad)
    130. Else
    131. MessageBox.Show("Die Wörterbuchdatei wurde nicht gefunden. Bitte überprüfen Sie den Pfad.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    132. End If
    133. End Sub
    134. ' Ereignishandler für Textänderungen
    135. Private Sub TxtEditor_TextChanged(sender As Object, e As EventArgs) Handles TxtEditor.TextChanged
    136. MarkiereHyperlinks()
    137. End Sub
    138. ' Methode zum Setzen des Programmicons
    139. Private Sub SetProgramIcon()
    140. Dim iconPath As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources\texteditor.ico")
    141. Try
    142. If File.Exists(iconPath) Then
    143. Me.Icon = New Icon(iconPath)
    144. End If
    145. Catch ex As Exception
    146. MessageBox.Show("Fehler beim Laden des Programmicons: " & ex.ToString(), "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    147. End Try
    148. End Sub
    149. ' Dateiformat registrieren
    150. Private Sub RegisterFileAssociation()
    151. Dim progId As String = "tmEditor.File"
    152. Dim appName As String = "TM Editor"
    153. Dim fileExtension As String = ".tmEditor"
    154. Try
    155. ' Registrieren des Dateityps
    156. Using key As RegistryKey = Registry.ClassesRoot.CreateSubKey(fileExtension)
    157. key.SetValue("", progId)
    158. End Using
    159. Using key As RegistryKey = Registry.ClassesRoot.CreateSubKey(progId)
    160. key.SetValue("", appName)
    161. Using iconKey As RegistryKey = key.CreateSubKey("DefaultIcon")
    162. iconKey.SetValue("", IconPath)
    163. End Using
    164. Using shellKey As RegistryKey = key.CreateSubKey("shell\open\command")
    165. shellKey.SetValue("", """" & Application.ExecutablePath & """ ""%1""")
    166. End Using
    167. End Using
    168. ' Aktualisieren des Windows Explorers
    169. SHChangeNotify(&H8000000, &H0, IntPtr.Zero, IntPtr.Zero)
    170. ' Benachrichtigung anzeigen
    171. ToolStripLabel1.Text = "Dateizuordnung aktualisiert."
    172. Catch ex As Exception
    173. MessageBox.Show("Fehler beim Aktualisieren der Dateizuordnung: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    174. ToolStripLabel1.Text = "Fehler beim Aktualisieren der Dateizuordnung."
    175. End Try
    176. End Sub
    177. Private Sub TmEditor_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    178. ' Timer deaktivieren
    179. AutoSaveTimer.Stop()
    180. HighlightTimer.Stop()
    181. ' Speichern von Einstellungen und Daten
    182. SaveSettings()
    183. ' Anwendung beenden
    184. Application.Exit()
    185. End Sub
    186. Private Sub AutoSaveTimer_Tick(sender As Object, e As EventArgs) Handles AutoSaveTimer.Tick
    187. If autoSaveEnabled AndAlso TxtEditor.Rtf <> lastTextBeforeSave Then
    188. SaveTextToFile(lastFilePath)
    189. lastTextBeforeSave = TxtEditor.Rtf
    190. End If
    191. End Sub
    192. Private Sub HighlightTimer_Tick(sender As Object, e As EventArgs) Handles HighlightTimer.Tick
    193. RemoveHighlightColor(RichTextBoxFinds.None)
    194. End Sub
    195. Private Sub LoadSettings()
    196. ' Zuletzt ausgewählte Schriftgröße laden
    197. If My.Settings.FontSize >= 0 AndAlso My.Settings.FontSize < fontSizes.Count Then
    198. cmbFontSize.SelectedIndex = My.Settings.FontSize
    199. End If
    200. ' Zuletzt ausgewählte Schriftart laden
    201. If cmbFontFamily.Items.Count > 0 AndAlso Not String.IsNullOrEmpty(My.Settings.SelectedFont) AndAlso cmbFontFamily.Items.Contains(My.Settings.SelectedFont) Then
    202. cmbFontFamily.SelectedItem = My.Settings.SelectedFont
    203. End If
    204. ' Zuletzt ausgewählte Farbe laden
    205. selectedColor = My.Settings.SelectedColor
    206. ' Zuletzt geöffneten Pfad laden
    207. lastFilePath = My.Settings.LastFilePath
    208. End Sub
    209. Private Sub SaveSettings()
    210. ' Zuletzt ausgewählte Schriftgröße speichern
    211. My.Settings.FontSize = cmbFontSize.SelectedIndex
    212. ' Zuletzt ausgewählte Schriftart speichern, falls vorhanden
    213. If cmbFontFamily.SelectedItem IsNot Nothing Then
    214. My.Settings.SelectedFont = cmbFontFamily.SelectedItem.ToString()
    215. End If
    216. ' Zuletzt ausgewählte Farbe speichern
    217. My.Settings.SelectedColor = selectedColor
    218. ' Zuletzt geöffneten Pfad speichern
    219. My.Settings.LastFilePath = lastFilePath
    220. ' Einstellungen speichern
    221. My.Settings.Save()
    222. End Sub
    223. Private Sub CmbFontSize_SelectedIndexChanged(sender As Object, e As EventArgs)
    224. ' Schriftgröße ändern
    225. If cmbFontSize.SelectedIndex >= 0 AndAlso cmbFontSize.SelectedIndex < fontSizes.Count Then
    226. Dim newSize As Integer = fontSizes(cmbFontSize.SelectedIndex)
    227. TxtEditor.SelectionFont = New Font(TxtEditor.SelectionFont.FontFamily, newSize, TxtEditor.SelectionFont.Style)
    228. End If
    229. End Sub
    230. Private Sub CmbFontFamily_SelectedIndexChanged(sender As Object, e As EventArgs)
    231. ' Schriftart ändern
    232. If cmbFontFamily.SelectedItem IsNot Nothing Then
    233. Dim newFont As String = cmbFontFamily.SelectedItem.ToString()
    234. TxtEditor.SelectionFont = New Font(newFont, TxtEditor.SelectionFont.Size, TxtEditor.SelectionFont.Style)
    235. End If
    236. End Sub
    237. Private Sub ColorButton_Click(sender As Object, e As EventArgs)
    238. ' Schriftfarbe ändern
    239. Dim btn As Button = DirectCast(sender, Button)
    240. Select Case btn.Name
    241. Case "btnBlack"
    242. selectedColor = Color.Black
    243. Case "btnRed"
    244. selectedColor = Color.Red
    245. Case "btnBlue"
    246. selectedColor = Color.Blue
    247. Case "btnGreen"
    248. selectedColor = Color.Green
    249. End Select
    250. TxtEditor.SelectionColor = selectedColor
    251. End Sub
    252. Private Sub BtnBold_Click(sender As Object, e As EventArgs)
    253. ' Fettstil ändern
    254. If TxtEditor.SelectionFont IsNot Nothing Then
    255. Dim currentFont As Font = TxtEditor.SelectionFont
    256. Dim newFontStyle As FontStyle = If(currentFont.Bold, currentFont.Style Xor FontStyle.Bold, currentFont.Style Or FontStyle.Bold)
    257. TxtEditor.SelectionFont = New Font(currentFont.FontFamily, currentFont.Size, newFontStyle)
    258. End If
    259. End Sub
    260. Private Sub BtnItalic_Click(sender As Object, e As EventArgs)
    261. ' Kursivstil ändern
    262. If TxtEditor.SelectionFont IsNot Nothing Then
    263. Dim currentFont As Font = TxtEditor.SelectionFont
    264. Dim newFontStyle As FontStyle = If(currentFont.Italic, currentFont.Style Xor FontStyle.Italic, currentFont.Style Or FontStyle.Italic)
    265. TxtEditor.SelectionFont = New Font(currentFont.FontFamily, currentFont.Size, newFontStyle)
    266. End If
    267. End Sub
    268. Private Sub BtnUnderline_Click(sender As Object, e As EventArgs)
    269. ' Unterstrichenstil ändern
    270. If TxtEditor.SelectionFont IsNot Nothing Then
    271. Dim currentFont As Font = TxtEditor.SelectionFont
    272. Dim newFontStyle As FontStyle = If(currentFont.Underline, currentFont.Style Xor FontStyle.Underline, currentFont.Style Or FontStyle.Underline)
    273. TxtEditor.SelectionFont = New Font(currentFont.FontFamily, currentFont.Size, newFontStyle)
    274. End If
    275. End Sub
    276. Private Sub RemoveHighlightColor(richTextBoxFinds As RichTextBoxFinds)
    277. ' Alle markierten Textstellen ohne Hervorhebungsfarbe zurücksetzen
    278. Dim startPosition As Integer = 0
    279. While True
    280. Dim indexOfStart As Integer = TxtEditor.Find("^[A-Za-z0-9äöüÄÖÜß]+$", startPosition, richTextBoxFinds)
    281. If indexOfStart < 0 Then Exit While
    282. TxtEditor.SelectionStart = indexOfStart
    283. TxtEditor.SelectionLength = 0
    284. TxtEditor.SelectionColor = Color.Black
    285. startPosition = indexOfStart + 1
    286. End While
    287. End Sub
    288. Private Sub SpeichernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SpeichernToolStripMenuItem1.Click
    289. Dim saveDialog As New SaveFileDialog With {
    290. .Filter = "RTF-Dateien (*.rtf)|*.rtf|Textdateien (*.txt)|*.txt|tmEditor Dateien (*.tmEditor)|*.tmEditor"
    291. }
    292. If saveDialog.ShowDialog() = DialogResult.OK Then
    293. lastFilePath = saveDialog.FileName
    294. SaveTextToFile(lastFilePath)
    295. Me.Text = Path.GetFileName(lastFilePath) & " - tmEditor"
    296. ToolStripLabel1.Text = "Dokument wurde gespeichert."
    297. Else
    298. ToolStripLabel1.Text = "Speichern abgebrochen."
    299. End If
    300. End Sub
    301. Private Sub ÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ÖffnenToolStripMenuItem1.Click
    302. Dim openFileDialog As New OpenFileDialog With {
    303. .Filter = "RTF-Dateien (*.rtf)|*.rtf|Textdateien (*.txt)|*.txt|tmEditor Dateien (*.tmEditor)|*.tmEditor"
    304. }
    305. If openFileDialog.ShowDialog() = DialogResult.OK Then
    306. lastFilePath = openFileDialog.FileName
    307. Try
    308. If openFileDialog.FileName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then
    309. TxtEditor.LoadFile(openFileDialog.FileName, RichTextBoxStreamType.PlainText)
    310. ElseIf openFileDialog.FileName.EndsWith(".rtf", StringComparison.OrdinalIgnoreCase) Then
    311. TxtEditor.LoadFile(openFileDialog.FileName)
    312. ElseIf openFileDialog.FileName.EndsWith(".tmEditor", StringComparison.OrdinalIgnoreCase) Then
    313. TxtEditor.LoadFile(openFileDialog.FileName)
    314. Else
    315. ToolStripLabel1.Text = "Das Dateiformat wird nicht unterstützt."
    316. Exit Sub
    317. End If
    318. Me.Text = Path.GetFileName(lastFilePath) & " - tmEditor"
    319. ToolStripLabel1.Text = "Dokument wurde geöffnet."
    320. ' Rechtschreibprüfung durchführen
    321. ÜberprüfeRechtschreibung()
    322. Catch ex As Exception
    323. ToolStripLabel1.Text = "Fehler beim Öffnen der Datei: " & ex.Message
    324. End Try
    325. Else
    326. ToolStripLabel1.Text = "Öffnen abgebrochen."
    327. End If
    328. End Sub
    329. Private Sub BildAusDateiToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BildAusDateiToolStripMenuItem.Click
    330. Dim openFileDialog As New OpenFileDialog With {
    331. .Filter = "Bilddateien|*.bmp;*.jpg;*.jpeg;*.gif;*.png",
    332. .Title = "Bild auswählen"
    333. }
    334. If openFileDialog.ShowDialog() = DialogResult.OK Then
    335. Dim imagePath As String = openFileDialog.FileName
    336. InsertImage(imagePath)
    337. ' Status-Text anzeigen
    338. ToolStripLabel1.Text = "Bild wurde eingefügt."
    339. End If
    340. End Sub
    341. Private Sub InsertImage(imagePath As String)
    342. Try
    343. Dim originalImage As Image = Image.FromFile(imagePath)
    344. Dim scaleFactor As Single = 0.5 ' Skalierungsfaktor (0.5 bedeutet 50% der Originalgröße)
    345. Dim scaledWidth As Integer = CInt(originalImage.Width * scaleFactor)
    346. Dim scaledHeight As Integer = CInt(originalImage.Height * scaleFactor)
    347. Dim scaledImage As Image = originalImage.GetThumbnailImage(scaledWidth, scaledHeight, Nothing, IntPtr.Zero)
    348. Clipboard.SetDataObject(scaledImage)
    349. ' Bild einfügen
    350. TxtEditor.Paste(DataFormats.GetFormat(DataFormats.Bitmap))
    351. ' Markierten Text löschen und neuen Zeilenumbruch einfügen
    352. TxtEditor.SelectedText = ""
    353. TxtEditor.SelectedRtf = "{\rtf1\par}"
    354. Catch ex As Exception
    355. MessageBox.Show("Fehler beim Einfügen des Bildes: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    356. End Try
    357. End Sub
    358. Private Sub SaveTextToFile(filePath As String)
    359. If Not String.IsNullOrEmpty(filePath) Then
    360. Try
    361. If filePath.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then
    362. ' Speichern als TXT-Datei
    363. TxtEditor.SaveFile(filePath, RichTextBoxStreamType.PlainText)
    364. ElseIf filePath.EndsWith(".rtf", StringComparison.OrdinalIgnoreCase) Then
    365. ' Speichern als RTF-Datei
    366. TxtEditor.SaveFile(filePath)
    367. ElseIf filePath.EndsWith(".tmEditor", StringComparison.OrdinalIgnoreCase) Then
    368. ' Speichern als TM Editor-Datei
    369. TxtEditor.SaveFile(filePath)
    370. Else
    371. MessageBox.Show("Das Dateiformat wird nicht unterstützt.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    372. ' Status-Text anzeigen
    373. ToolStripLabel1.Text = "Speichern fehlgeschlagen: Nicht unterstütztes Dateiformat."
    374. Exit Sub
    375. End If
    376. ' Status-Text anzeigen
    377. ToolStripLabel1.Text = "Dokument wurde gespeichert."
    378. Catch ex As Exception
    379. MessageBox.Show("Fehler beim Speichern der Datei: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    380. ' Status-Text anzeigen
    381. ToolStripLabel1.Text = "Speichern fehlgeschlagen."
    382. End Try
    383. Else
    384. SpeichernToolStripMenuItem_Click(Nothing, Nothing)
    385. End If
    386. End Sub
    387. Private Sub NewDocument()
    388. TxtEditor.Clear()
    389. End Sub
    390. Private Sub NeuToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NeuToolStripMenuItem1.Click
    391. ' Neues Dokument erstellen
    392. NewDocument()
    393. ' Status-Text anzeigen
    394. ToolStripLabel1.Text = "Neues Dokument wurde erstellt."
    395. End Sub
    396. Private Sub TbZoomIn_Click(sender As Object, e As EventArgs) Handles tbZoomIn.Click
    397. If TxtEditor.ZoomFactor = 63 Then
    398. Exit Sub
    399. Else
    400. TxtEditor.ZoomFactor = TxtEditor.ZoomFactor + 1
    401. End If
    402. End Sub
    403. Private Sub TbZoomOut_Click(sender As Object, e As EventArgs) Handles tbZoomOut.Click
    404. If TxtEditor.ZoomFactor = 1 Then
    405. Exit Sub
    406. Else
    407. TxtEditor.ZoomFactor = TxtEditor.ZoomFactor - 1
    408. End If
    409. End Sub
    410. ' Ereignishandler für Tastatureingaben hinzufügen
    411. Private Sub TxtEditor_KeyDown(sender As Object, e As KeyEventArgs) Handles TxtEditor.KeyDown
    412. If e.Control Then
    413. If e.KeyCode = Keys.Oemplus Then
    414. TbZoomIn_Click(Nothing, Nothing)
    415. ElseIf e.KeyCode = Keys.OemMinus Then
    416. TbZoomOut_Click(Nothing, Nothing)
    417. End If
    418. End If
    419. lblCharacterCount.Text = "Zeichenanzahl: " & TxtEditor.TextLength.ToString()
    420. If e.KeyCode = Keys.F7 Then
    421. ' F7 zum Überprüfen der Rechtschreibung
    422. ÜberprüfeRechtschreibung()
    423. e.SuppressKeyPress = True
    424. End If
    425. End Sub
    426. Private Sub BtnJustify_Click(sender As Object, e As EventArgs) Handles btnJustify.Click
    427. TxtEditor.SelectionAlignment = HorizontalAlignment.Left
    428. End Sub
    429. Private Sub BtnCenterAlign_Click(sender As Object, e As EventArgs) Handles btnCenterAlign.Click
    430. TxtEditor.SelectionAlignment = HorizontalAlignment.Center
    431. End Sub
    432. Private Sub BtnRightAlign_Click(sender As Object, e As EventArgs) Handles btnRightAlign.Click
    433. TxtEditor.SelectionAlignment = HorizontalAlignment.Right
    434. End Sub
    435. Private Sub Suchen_Click(sender As Object, e As EventArgs) Handles Suchen.Click
    436. If Not String.IsNullOrEmpty(txtSearch.Text) Then
    437. Dim searchStart As Integer = TxtEditor.SelectionStart + TxtEditor.SelectionLength
    438. Dim index As Integer = TxtEditor.Find(txtSearch.Text, searchStart, RichTextBoxFinds.None)
    439. If index <> -1 Then
    440. ' Text gefunden
    441. TxtEditor.Select(index, txtSearch.Text.Length)
    442. TxtEditor.ScrollToCaret()
    443. TxtEditor.Focus()
    444. txtSearch.Text = ""
    445. Else
    446. MessageBox.Show("Text nicht gefunden.", "Suchen", MessageBoxButtons.OK, MessageBoxIcon.Information)
    447. End If
    448. End If
    449. End Sub
    450. Private Sub TxtSearch_KeyDown(sender As Object, e As KeyEventArgs) Handles txtSearch.KeyDown
    451. If e.KeyCode = Keys.Enter Then
    452. Suchen.PerformClick()
    453. End If
    454. End Sub
    455. Private Sub LoadFileToRichTextBox(filePath As String)
    456. ' Dateiinhalt in die RichTextBox laden
    457. If File.Exists(filePath) Then
    458. Dim fileContent As String = File.ReadAllText(filePath)
    459. TxtEditor.Rtf = fileContent ' Annahme: Die Datei enthält RTF-formatierten Text
    460. End If
    461. End Sub
    462. Private Function GetDebuggerDisplay() As String
    463. Return ToString()
    464. End Function
    465. Private Sub BeendenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BeendenToolStripMenuItem.Click
    466. Application.Exit()
    467. End Sub
    468. End Class
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de

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

    Ich hab den Code nicht wirlich genau angeschaut. Aber eine Sache ist mir sofort aufgefallen, Wörterbuch heist auf Englisch Dictionary.

    Hast du die KI gefragt wie man ein Wörterbuch in VB benutzt oder so ähnlich? Da hat die KI wohl nicht verstanden was du von ihr wolltest. KI ersetzt keine Grundlagen.

    Hier:

    VB.NET-Quellcode

    1. Wörterbuch.Add(wort.ToLower(), Nothing)

    addest du ein KeyValuePair mit dem Key(das Wort aus der Datei) und die dazugehörige Value nothing. Besser gesagt intern ist das ein KeyValuePair das aus den Parametern gebildet wird.


    PS
    @Thiemo1991 Was ist dein Ziel? Sowas wie AutoComplete? Dann fütter die KI mal mit dieser Information.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

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

    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Ja, ich habe die KI diesbezüglich gefragt, wie man das in meinen Code hinzufügen kann sodass es auch funktionieren kann, aber ohne Erfolg. Wenn die Überprüfung funktioniert, dann werde ich auch diese Funktion AutoComplete einfügen.

    Hier habe ich nun die ganze Projektmappe hochgeladen:
    uploadnow.io/f/6vDK5cd
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de

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

    Der Fehler ist hier eindeutig, dass du versuchst, mit einer KI etwas zu erreichen, wofür eine KI niemals gedacht war.
    Du musst schon selber lernen zu programmieren und nicht versuchen, dich komplett auf eine KI zu stützen.

    Das ist einfach albern. Als unterstützendes Mittel - als Copilot, wie das schon richtig genannt wird - ist KI eine super Sache. Aber es kann nicht diese ganzen Sachen alleine machen.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Ich verlasse mich nicht nur auf KI, sondern überlege auch viel selber aber dennoch kann ich keinen Code wirklich alleine schreiben (eventuell abändern).
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de
    Also um erstmal eine Auflistung der Wörter zu haben, wäre doch eine ganz normale Liste(von Zeichenkette) anstatt eines Wörterbuch ausreichend oder? Achtung, Sprachbarriere! Genau damit kam die KI nicht klar oder konnte nicht richtig schlussfolgern weil einfach nicht genug input. Dir war vermutlich nicht bewusst das Wörterbuch auf englisch Dictionary heist und die KI dachte das du das meinst. Also kann man nun schlussfolgern, ohne Fachchinesich zu können kann man auch mit einer KI nicht programmieren. Zumindest fehlende Englisch-Kenntnisse, wurde dir hier zum Verhängniss.

    Also Dictionary weg und etwas anderes nehmen was du schon kennst. Hat auch eine Add-Funktion, aber braucht nur 1 Parameter. Dann hättest du schonmal eine Auflistung ohne die es ja nicht geht.



    PS
    @Thiemo1991 nicht das nun das menschliche Hirn(meins) schuld ist, sowas wie ein übersetzer soll das nicht zufällig werden? Weil bei Wörterbuch liegt das ja nicht so fern. Dann eher eine Datenbank, so kannste dann zumindest einen sehr einfachen übersetzer machen, der keine Grammatik kann. Zumindest Dataset und Co. weis nicht ob die Tutorials von ErfinderDesRades dir weiterhelfen würden. Ein Dictionary allein reicht dafür jedenfalls nicht, da könnte man nicht wirklich Multilingual arbeiten. Vorallem unwartbar in zig Textdateien.


    New Record! 16 Edits, 8o
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

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

    Nein, das soll kein Übersetzer werden, sondern im kleinen sowie Microsoft Word bzw. OpenOffice.

    Ich habe alles auf uploadnow.io/de/share die komplette Projektmappe hochgeladen.

    @RodFromGermany, könnt ihr mir sagen, woran es scheitert, dass das Wörterbuch nicht funktionieren möchte?
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de
    Du zeigst hier null Eigeninitiative. Ich bin schon erstaunt, dass die Kollegen hier im Forum überhaupt versucht haben, dir großartig weiterzuhelfen.

    Du musst lernen. Öffne Notepad und die Datei ​C:\Windows\System32\drivers\etc\hosts und da trägst du ein

    Quellcode

    1. 0.0.0.0 chat.openai.com
    2. 0.0.0.0 chatgpt.com


    Danach schaust du dir ein paar Bücher an, die gibt's auch online, mit den Grundlagen der Programmierung.

    Der Compiler hat dir schon ganz genau gesagt, was ihm fehlt und was kaputt ist. Aber du hast es dir in den Kopf gesetzt, dich komplett auf die KI zu verlassen, anstatt selber Arbeit zu investieren.

    Ich sage es nochmal: keine KI ist jemals dafür gedacht gewesen, Können und Wissen zu ersetzen. Es ist lediglich ein Tool, was dich unterstützten kann, bei der Arbeit.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)

    Thiemo1991 schrieb:

    dass das Wörterbuch nicht funktionieren möchte?
    Wie soll es denn funktionieren?
    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!
    @Thiemo1991 Habe ich das richtig verstanden?
    Du möchtest eine Rechtschreib-Kontrolle?
    Dann brauchst Du kein Dictionary, sondern eine List(Of String), das mit den richtig geschriebenen Wörtern befüllt ist.
    Für jedes geschriebene Wort, das nicht in der Liste enthalten ist, gibt es zwei Möglichkeiten:
    - es ist falsch geschrieben
    oder
    - es fehlt in der Liste.
    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!
    Also möchtest du das hier: learn.microsoft.com/de-de/dotn…k?view=windowsdesktop-8.0

    Microsoft bietet ein Spellcheck an. Erfinde das Rad nicht neu.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    @siycah Ist Dein Link nicht eher was für WPF? Klar kann man auch die Controls aus WPF, WinRT bzw UWP in einem WinForms Projekt hosten und die entsprechende SpellChecker Funktionalität nutzen. Es geht auch direkt in WinForms, wenn man direkt die SpellChecker Interfaces verwendet bzw der WinForms-RTB zusätzlich ein paar Eigenschaften verpasst. Siehe auch: SpellCheck in einer RTB (WinForms) und eine SpellChecker-Klasse per Interface ISpellChecker
    Mfg -Franky-
    Irgendwie gibt es Fehler bei der Darstellungen von Wörter. Das ganze Projekt habe ich als Anhang mit angehängt.
    Dateien
    • tmEditor.zip

      (9,76 MB, 25 mal heruntergeladen, zuletzt: )
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de