Visual Basic .NET Language
WinForms SpellCheckBox
खोज…
परिचय
WindowsForms एप्लिकेशन में एक वर्तनी चेक बॉक्स कैसे जोड़ें, इस पर उदाहरण दें। इस उदाहरण में Word को संस्थापित करने की आवश्यकता नहीं है और न ही यह किसी भी तरह से Word का उपयोग करता है।
यह WPF TextBox से WPF UserControl बनाने के लिए ElementHost नियंत्रण का उपयोग करके WPF इंटरॉप का उपयोग करता है। WPF TextBox में स्पेल चेक के लिए एक फंक्शन है। हम बाहरी कार्यक्रम पर निर्भर रहने के बजाय इस निर्मित फंक्शन का लाभ उठाने जा रहे हैं।
एलिमेंटहोस्ट WPF टेक्स्टबॉक्स
यह उदाहरण एक उदाहरण के बाद बनाया गया था जो मुझे इंटरनेट पर मिला था। मुझे लिंक नहीं मिल रहा है या मैं लेखक को क्रेडिट दूंगा। मैंने वह नमूना लिया जो मुझे मिला और इसे अपने आवेदन के लिए काम करने के लिए संशोधित किया।
- निम्नलिखित संदर्भ जोड़ें:
System.Xaml, PresentationCore, PresentationFramework, WindowsBase और WindowsFormsIntegration
एक नया वर्ग बनाएं और इस कोड को पिछले करें
Imports System Imports System.ComponentModel Imports System.ComponentModel.Design.Serialization Imports System.Windows Imports System.Windows.Controls Imports System.Windows.Forms.Integration Imports System.Windows.Forms.Design <Designer(GetType(ControlDesigner))> _ Class SpellCheckBox Inherits ElementHost Private box As TextBox Public Sub New() box = New TextBox() MyBase.Child = box AddHandler box.TextChanged, AddressOf box_TextChanged box.SpellCheck.IsEnabled = True box.VerticalScrollBarVisibility = ScrollBarVisibility.Auto Me.Size = New System.Drawing.Size(100, 20) End Sub Private Sub box_TextChanged(ByVal sender As Object, ByVal e As EventArgs) OnTextChanged(EventArgs.Empty) End Sub <DefaultValue("")> _ Public Overrides Property Text() As String Get Return box.Text End Get Set(ByVal value As String) box.Text = value End Set End Property <DefaultValue(True)> _ Public Property MultiLine() As Boolean Get Return box.AcceptsReturn End Get Set(ByVal value As Boolean) box.AcceptsReturn = value End Set End Property <DefaultValue(True)> _ Public Property WordWrap() As Boolean Get Return box.TextWrapping <> TextWrapping.Wrap End Get Set(ByVal value As Boolean) If value Then box.TextWrapping = TextWrapping.Wrap Else box.TextWrapping = TextWrapping.NoWrap End If End Set End Property <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _ Public Shadows Property Child() As System.Windows.UIElement Get Return MyBase.Child End Get Set(ByVal value As System.Windows.UIElement) '' Do nothing to solve a problem with the serializer !! End Set End Property End Class
समाधान का पुनर्निर्माण करें।
एक नया फ़ॉर्म जोड़ें।
अपने वर्ग के नाम के लिए टूलबॉक्स खोजें। यह उदाहरण "स्पेलचेक" है। इसे 'YourSoulutionName' अवयवों के अंतर्गत सूचीबद्ध किया जाना चाहिए।
अपने प्रपत्र पर नया नियंत्रण खींचें
किसी भी मैप की गई प्रॉपर्टीज़ को लोड लोड इवेंट में सेट करें
Private Sub form1_Load(sender As Object, e As EventArgs) Handles Me.Load
spellcheckbox.WordWrap = True
spellcheckbox.MultiLin = True
'Add any other property modifiers here...
End Sub
- आखिरी चीज जो आपको करने की ज़रूरत है वह है आपके आवेदन की डीपीआई जागरूकता को बदलना। ऐसा इसलिए है क्योंकि आप WinForms एप्लिकेशन का उपयोग कर रहे हैं। डिफ़ॉल्ट रूप से सभी WinForms अनुप्रयोग DPI UNAWARE हैं। एक बार जब आपके पास एक नियंत्रण होता है जिसमें एक तत्व होस्ट (WPF इंटरोप) होता है, तो एप्लिकेशन अब DPI AWARE हो जाएगा। यह आपके UI तत्वों के साथ गड़बड़ी कर सकता है या नहीं कर सकता है। इसका समाधान डीपीआई यूएनएवेयर बनने के लिए एप्लिकेशन को बल देना है। ऐसा करने के 2 तरीके हैं। पहला मैनिफ़ेस्ट फ़ाइल के माध्यम से है और दूसरा इसे अपने प्रोग्राम में हार्ड कोड के लिए है। यदि आप अपने एप्लिकेशन को तैनात करने के लिए OneClick का उपयोग कर रहे हैं, तो आपको इसे हार्ड कोड देना होगा, न कि मैनिफ़ेस्ट फ़ाइल या त्रुटियों का उपयोग करना अपरिहार्य होगा।
निम्नलिखित दोनों उदाहरण निम्नलिखित में पाए जा सकते हैं: बड़ी DPI सेटिंग्स पर WinForms स्केलिंग - क्या यह भी संभव है? DPI पर शानदार स्पष्टीकरण के लिए Telerik.com को धन्यवाद।
हार्ड कोडित डीपीआई अवेयर कोड उदाहरण। पहले फॉर्म को इनिशियलाइज़ करने से पहले इस एमयूएस को निष्पादित किया जाना चाहिए। मैं हमेशा ApplicationEvents.vb फ़ाइल में इसे रखता हूँ। आप समाधान एक्सप्लोरर में अपने प्रोजेक्ट के नाम पर राइट क्लिक करके और "ओपन" चुनकर इस फाइल को प्राप्त कर सकते हैं। फिर बाईं ओर एप्लिकेशन टैब चुनें और फिर स्प्लैश स्क्रीन ड्रॉप डाउन के नीचे दाईं ओर "एप्लिकेशन एप्लिकेशन ईवेंट देखें" पर क्लिक करें।
Namespace My
' The following events are available for MyApplication:
'
' Startup: Raised when the application starts, before the startup form is created.
' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally.
' UnhandledException: Raised if the application encounters an unhandled exception.
' StartupNextInstance: Raised when launching a single-instance application and the application is already active.
' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
Partial Friend Class MyApplication
Private Enum PROCESS_DPI_AWARENESS
Process_DPI_Unaware = 0
Process_System_DPI_Aware = 1
Process_Per_Monitor_DPI_Aware = 2
End Enum
Private Declare Function SetProcessDpiAwareness Lib "shcore.dll" (ByVal Value As PROCESS_DPI_AWARENESS) As Long
Private Sub SetDPI()
'Results from SetProcessDPIAwareness
'Const S_OK = &H0&
'Const E_INVALIDARG = &H80070057
'Const E_ACCESSDENIED = &H80070005
Dim lngResult As Long
lngResult = SetProcessDpiAwareness(PROCESS_DPI_AWARENESS.Process_DPI_Unaware)
End Sub
Private Sub MyApplication_Startup(sender As Object, e As ApplicationServices.StartupEventArgs) Handles Me.Startup
SetDPI()
End Sub
End Namespace
प्रकट उदाहरण
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>