تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] تغيير لون خلفية textbox عند انتقال المؤشر داخل الاداة
#1
تحية طيبة لكم 
استكمال لسؤوال سابق لي في هذا المنتدى الموفق اود التكرم بالحصول على اجابة لما يلي 

اريد كود او طريقة لتغير اي مربع نص في الفورم عندما يتم تنشيطة ويكون جاهز للكتابة 

جربت طريقة ان اقوم بوضع الكود لكل اداة في حدث عند الدخول والخروج ولكن اصبح ذلك شاق 
فهل من طريقة افضل 
وفق الله الجميع
الرد }}}
تم الشكر بواسطة: ابو ليلى , asemshahen5
#2
ضع تايمر 


وفي حدث الــ Load للفورم

كود :
  Timer1.Start()

وفي حدث الـــ Tick للتايمر

إقتباس :  For Each x As TextBox In Me.Controls.OfType(Of TextBox)
            x.BackColor = Color.White
            If x.GetHashCode = GetContainerControl.ActiveControl.GetHashCode Then
                x.BackColor = Color.Red
            End If
        Next

سيتم مراقبة النشط من الكنترول لكن من نوع تكست
------
مع ان حدثي الـــ GotFocus والـــ LostFocu ليس صعبا اذا تم تحويل الــ sender من Object إلى Textbox ...... وجمعها جميعا في حدث واحد
الرد }}}
#3
السلام عليكم و رحمة الله و بركاته
افضل الحلول لهكذا عقبات , هي باعادة تصميم الكائن و فرض التغيرات في المناطق التي نريدها
و هي هنا عند التركيز و فقد التركيز
انشأ مشروع جديد و سميه مثلاً MyTextBox
اضف له كلاس باسم MyTextBox , ثم ضع بداخله الكود التالي
PHP كود :
Imports System.Runtime.InteropServices

Public Class MyTextBox Inherits TextBox

    Public 
Const WM_NCPAINT As Integer = &H85

    
<Flags()>
 
   Private Enum RedrawWindowFlags As UInteger
        Invalidate 
= &H2
        InternalPaint 
= &H3
        
[Erase] = &H4
        Validate 
= &H8
        NoInternalPaint 
= &H10
        NoErase 
= &H20
        NoChildren 
= &H40
        AllChildren 
= &H80
        UpdateNow 
= &H100
        EraseNow 
= &H200
        Frame 
= &H400
        NoFrame 
= &H800
    End Enum

    
<DllImport("User32.dll")>
 
   Public Shared Function GetWindowDC(ByVal hWnd As IntPtr) As IntPtr
    End 
Function

 
   <DllImport("user32.dll")>
 
   Private Shared Function ReleaseDC(ByVal hWnd As IntPtrByVal hDC As IntPtr) As Boolean
    End 
Function

 
   <DllImport("user32.dll")>
 
   Private Shared Function RedrawWindow(hWnd As IntPtrlprcUpdate As IntPtrhrgnUpdate As IntPtrflags As RedrawWindowFlags) As Boolean
    End 
Function

 
   Public Sub New()
 
       MyBase.BorderStyle Windows.Forms.BorderStyle.Fixed3D
    End Sub

    Protected Overrides Sub OnResize
(As System.EventArgs)
 
       MyBase.OnResize(e)
 
       RedrawWindow(Me.HandleIntPtr.ZeroIntPtr.ZeroRedrawWindowFlags.Frame Or RedrawWindowFlags.UpdateNow Or RedrawWindowFlags.Invalidate)
 
   End Sub

    Protected Overrides Sub WndProc
(ByRef m As Message)
 
       MyBase.WndProc(m)

 
       If m.Msg WM_NCPAINT Then
            Dim hDC 
As IntPtr GetWindowDC(m.HWnd)
 
           Using g As Graphics Graphics.FromHdc(hDC)
 
               If Me.Focused Then
                    g
.DrawRectangle(Pens.CornflowerBlue, New Rectangle(00Me.Width 1Me.Height 1))
 
               Else
                    g
.DrawRectangle(Pens.Gainsboro, New Rectangle(00Me.Width 1Me.Height 1))
 
               End If
 
               g.DrawRectangle(SystemPens.Window, New Rectangle(11Me.Width 3Me.Height 3))
 
           End Using
            ReleaseDC
(m.HWndhDC)
 
       End If

 
   End Sub

    Protected Overrides Sub OnGotFocus
(ByVal e As System.EventArgs)
 
       MyBase.OnGotFocus(e)
 
       Me.BackColor Color.Red
    End Sub

    Protected Overrides Sub OnLostFocus
(ByVal e As System.EventArgs)
 
       Me.BackColor Color.White
        MyBase
.OnLostFocus(e)
 
   End Sub
End 
Class 
اعمل Build للمشروع , سيندرج لك عنصر جديد في قائمة الادوات باسم MyTextBox .
الان اسحبه الى المشروع و تمتع بخصائصه الجديدة
انتبه الى الحدثين OnGotFocus , OnLostFoucs
قمنا بتغير لون الخلفية الى اللون الذي نريد  , غيرها لما تحب
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
#4
(25-04-20, 11:40 PM)ابو ليلى كتب : السلام عليكم و رحمة الله و بركاته
افضل الحلول لهكذا عقبات , هي باعادة تصميم الكائن و فرض التغيرات في المناطق التي نريدها
و هي هنا عند التركيز و فقد التركيز
انشأ مشروع جديد و سميه مثلاً MyTextBox
اضف له كلاس باسم MyTextBox , ثم ضع بداخله الكود التالي
PHP كود :
Imports System.Runtime.InteropServices

Public Class MyTextBox Inherits TextBox

    Public 
Const WM_NCPAINT As Integer = &H85

    
<Flags()>
 
   Private Enum RedrawWindowFlags As UInteger
        Invalidate 
= &H2
        InternalPaint 
= &H3
        
[Erase] = &H4
        Validate 
= &H8
        NoInternalPaint 
= &H10
        NoErase 
= &H20
        NoChildren 
= &H40
        AllChildren 
= &H80
        UpdateNow 
= &H100
        EraseNow 
= &H200
        Frame 
= &H400
        NoFrame 
= &H800
    End Enum

    
<DllImport("User32.dll")>
 
   Public Shared Function GetWindowDC(ByVal hWnd As IntPtr) As IntPtr
    End 
Function

 
   <DllImport("user32.dll")>
 
   Private Shared Function ReleaseDC(ByVal hWnd As IntPtrByVal hDC As IntPtr) As Boolean
    End 
Function

 
   <DllImport("user32.dll")>
 
   Private Shared Function RedrawWindow(hWnd As IntPtrlprcUpdate As IntPtrhrgnUpdate As IntPtrflags As RedrawWindowFlags) As Boolean
    End 
Function

 
   Public Sub New()
 
       MyBase.BorderStyle Windows.Forms.BorderStyle.Fixed3D
    End Sub

    Protected Overrides Sub OnResize
(As System.EventArgs)
 
       MyBase.OnResize(e)
 
       RedrawWindow(Me.HandleIntPtr.ZeroIntPtr.ZeroRedrawWindowFlags.Frame Or RedrawWindowFlags.UpdateNow Or RedrawWindowFlags.Invalidate)
 
   End Sub

    Protected Overrides Sub WndProc
(ByRef m As Message)
 
       MyBase.WndProc(m)

 
       If m.Msg WM_NCPAINT Then
            Dim hDC 
As IntPtr GetWindowDC(m.HWnd)
 
           Using g As Graphics Graphics.FromHdc(hDC)
 
               If Me.Focused Then
                    g
.DrawRectangle(Pens.CornflowerBlue, New Rectangle(00Me.Width 1Me.Height 1))
 
               Else
                    g
.DrawRectangle(Pens.Gainsboro, New Rectangle(00Me.Width 1Me.Height 1))
 
               End If
 
               g.DrawRectangle(SystemPens.Window, New Rectangle(11Me.Width 3Me.Height 3))
 
           End Using
            ReleaseDC
(m.HWndhDC)
 
       End If

 
   End Sub

    Protected Overrides Sub OnGotFocus
(ByVal e As System.EventArgs)
 
       MyBase.OnGotFocus(e)
 
       Me.BackColor Color.Red
    End Sub

    Protected Overrides Sub OnLostFocus
(ByVal e As System.EventArgs)
 
       Me.BackColor Color.White
        MyBase
.OnLostFocus(e)
 
   End Sub
End 
Class 
اعمل Build للمشروع , سيندرج لك عنصر جديد في قائمة الادوات باسم MyTextBox .
الان اسحبه الى المشروع و تمتع بخصائصه الجديدة
انتبه الى الحدثين OnGotFocus , OnLostFoucs
قمنا بتغير لون الخلفية الى اللون الذي نريد  , غيرها لما تحب

شكر الله لك ضبط معي الله يبارك فيك

(25-04-20, 10:34 PM)سامي محمد كتب : ضع تايمر 


وفي حدث الــ Load للفورم

كود :
  Timer1.Start()

وفي حدث الـــ Tick للتايمر

إقتباس :  For Each x As TextBox In Me.Controls.OfType(Of TextBox)
            x.BackColor = Color.White
            If x.GetHashCode = GetContainerControl.ActiveControl.GetHashCode Then
                x.BackColor = Color.Red
            End If
        Next

سيتم مراقبة النشط من الكنترول لكن من نوع تكست
------
مع ان حدثي الـــ GotFocus والـــ LostFocu ليس صعبا اذا تم تحويل الــ sender من Object إلى Textbox ...... وجمعها جميعا في حدث واحد

الشكر ايضا موصول لك اخوي سامي
الرد }}}
#5
Rainbow 
اخي يمكنك فعل هذا باكثر من طريقة بالاضافة الى ماذكره الاخوان قبلي 

1- اختر حدث Enter لاي تكست بوكس تريد تغيير لون خلفيته عندما يكون نشطا
وقم باضافة فاصلة بعد Handles TextBox1.Enter ثم اسم التكست بوكس الثاني وحدث Enter ,وفاصلة وهكذا الى ان تكمل اختيار كل التكست بوكس المطلوب تغيير لون خلفيتها

مثال:

كود :
Handles TextBox1.Enter, TextBox2.Enter, TextBox3.Enter


2- الطريقة الثانية هي تحديد جميع التكست بوكس التي تريد ان تغير لون خلفيتها على نموذج التصميم  ثم من نافذة الخصائص اضغط على الزر الذي يحمل صورة برق
واختر حدث Enter ,وضع فيه الكود التالي

كود :
 sender.backcolor = Color.AliceBlue

الكود السابق يحول لون التكست بوكس النشط الى اللون المذكور

و قم بفعل نفس الطريقة لكود حدث Leave

ليكون الكود لديك كالتالي:

كود :
    Private Sub TextBox1_Enter(sender As System.Object, e As System.EventArgs) Handles TextBox1.Enter, TextBox2.Enter, TextBox3.Enter
        sender.backcolor = Color.AliceBlue
    End Sub

    Private Sub TextBox1_Leave(sender As Object, e As System.EventArgs) Handles TextBox1.Leave, TextBox2.Leave, TextBox3.Leave
        sender.backcolor = Color.White
    End Sub

   

الرد }}}
#6
بصرحة الطريقة الافضل هي طريقةة أبو ليلي ... طبعا اذا كان كل الــ Textybox  التي في المشروع يستخدم لها نفس الطريقة 
-----
ولكن لا ادري  لماذا  ابو ليلى استخدم هذه الطريقة الطويلة مع وجود طرق اسهل بكثير لانشاء الخصائص داخل الاداة
الرد }}}
تم الشكر بواسطة: asemshahen5 , asemshahen5 , ابو ليلى


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] طريقة توسيط النص داخل اداة comboBox سمير1404 7 3,863 24-08-25, 01:01 PM
آخر رد: أبو خالد الشكري
  [سؤال] تغيير الفورم الرئيسي عند تشغيل البرنامج في Visual Studio مع .NET 8؟ silverlord 2 656 09-03-25, 03:52 AM
آخر رد: silverlord
  [كود] كود تغيير حجم النص في التكست بوكس hassan 8 8,801 30-01-25, 02:33 AM
آخر رد: خالد كامل1
  محتاج كود انتقال خالد كامل1 2 443 22-01-25, 11:38 AM
آخر رد: قناص المدينة
  كود انتقال مؤشر الماوس من تكست الى تكست اخر خالد كامل1 1 469 20-01-25, 12:21 AM
آخر رد: خالد كامل1
  تغيير أسم ملف DOX.1 3 3,276 01-01-25, 09:37 PM
آخر رد: anes
  استدعاء من جدولين داخل اداه FlowLayoutPanel برجاء الافادة للضرورة جداً modymody300894 7 642 15-11-24, 11:02 AM
آخر رد: modymody300894
  كتابه عدد معين من الارقام داخل تيكست بوكس modymody300894 3 561 07-11-24, 09:15 PM
آخر رد: modymody300894
  تغيير مكان حفظ الصورة من قاعدة البيانات إلى مجلد في مسار البرنامج F.H.M 37 2,353 05-11-24, 08:30 AM
آخر رد: F.H.M
  ترتيب شجره الحسابات داخل الجريد فيو modymody300894 2 412 31-10-24, 12:27 PM
آخر رد: modymody300894

التنقل السريع :


يقوم بقرائة الموضوع: