Прадухіліць кантроль адключэння ў vb.net

ёсць спосаб зрабіць кантроль заўсёды ўключаны, так што калі вы ўсталюеце Enabled = False не мае ніякага эфекту? Я спрабаваў дадаць апрацоўшчык падзеі EnabledChange такім чынам:

AddHandler mybutton.EnabledChange, Sub() 
                                         mybutton.EnabledChange = True
                                   End Sub

але гэта выклікае StackOverflow выключэння ў многіх сітуацыях, напрыклад, пры спробе адключыць элемент кіравання, які змяшчае кнопку. Так ёсць яшчэ адзін спосаб зрабіць гэта?

0
Праблема заключаецца ў тым, што мой праект поўны кода, дзе я адключыць шмат элементаў кіравання ў межах аднаго цыкла, так што я павінен дадаць ўмова для кожнага цыклу, каб прапусціць адключэнне гэтага кантролю. Паколькі гэта спецыяльны элемент кіравання, які дадаецца да кожнай форме я шукаў спосаб, каб проста прадухіліць, што іншы код адключыць
дададзена аўтар mck89, крыніца
Праблема заключаецца ў тым, што мой праект поўны кода, дзе я адключыць шмат элементаў кіравання ў межах аднаго цыкла, так што я павінен дадаць ўмова для кожнага цыклу, каб прапусціць адключэнне гэтага кантролю. Паколькі гэта спецыяльны элемент кіравання, які дадаецца да кожнай форме я шукаў спосаб, каб проста прадухіліць, што іншы код адключыць
дададзена аўтар mck89, крыніца
Чаму вы хочаце стварыць такую ​​пастку? Большая частка часу «магія» код дрэнны, вы забудзецеся пра тое, што яна існуе.
дададзена аўтар Tim Schmelter, крыніца
@ Mck89: рэфактарынг кода ніколі не выклікаць непатрэбную працу. У вашым выпадку не спрацоўвае Enabled падзеі, калі вы не хочаце, каб страляць. Змесціце ўмова ўнутры цыклу, так што, калі праўда, вы не ўстаноўлены Enabled = False .
дададзена аўтар Neolisk, крыніца
Ці не дадавайце код. Выдаліць код. У прыватнасці, код, які ўсталёўвае Enabled ўласцівасці Ілжывых :) Калі гэта не ваш код, гэта значыць праграміст, які можа дапамагчы вам, гэта не вельмі верагодна, што вы знойдзеце яго тут.
дададзена аўтар Hans Passant, крыніца

7 адказы

Паспрабуйце змяніць, як гэта .. гэта працавала для мяне

Private Sub myButton_EnabledChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles myButton.EnabledChanged
        If Not myButton.Enabled Then myButton.Enabled = True
    End Sub
1
дададзена
На жаль, гэта прыводзіць да таго ж выключэнне StackOverflow пры спробе адключыць кантэйнер элемента кіравання. Я не ведаю, чаму гэта адбываецца, можа быць, ён працягвае ўсталёўваць Enabled = False да таго часу, пакуль не будзе выконвацца кожным кантролем ўнутры яго.
дададзена аўтар mck89, крыніца

Паспрабуйце змяніць, як гэта .. гэта працавала для мяне

Private Sub myButton_EnabledChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles myButton.EnabledChanged
        If Not myButton.Enabled Then myButton.Enabled = True
    End Sub
1
дададзена
На жаль, гэта прыводзіць да таго ж выключэнне StackOverflow пры спробе адключыць кантэйнер элемента кіравання. Я не ведаю, чаму гэта адбываецца, можа быць, ён працягвае ўсталёўваць Enabled = False да таго часу, пакуль не будзе выконвацца кожным кантролем ўнутры яго.
дададзена аўтар mck89, крыніца

No

<�Моцны> Не в любой сферы добрай практыкі кадавання

  • калі вы зменіце яго на дазволеную = хлусня, ён змяняе налады з гэтым падзеяй ўласцівасці.

У чым праблема кода, будзе рашэнне?

Ва ўласцівасцях элемента кіравання, уключана = ісціна. Вам не трэба пісаць код для яго. Гэта ў дызайне формы.

У адказ на ваш каментар:

Вы можаце выкарыстоўваць патч, які matzone абраў .. асабіста я на карысць выдалення гэтага канкрэтнае кіравання з цыклу, і ў мяне былі праблемы з укладзенымі і бясконцымі завесамі ў vb.net ... Я аддаю перавагу мець менш непатрэбныя змены, у маёй праграме, проста дапамагаюць ліквідаваць памылкі. Гэта азначае, што вы павінны прайсці і забяспечыць код паўторнага ўключэння кантролю заўсёды выклікаецца кожны раз, калі яна змяняецца ў цыкле .. прашу памылак, калі вы спытаеце мяне .. гэта можа быць больш працы ў кароткатэрміновай перспектыве, але было б лепш, каб выбраць элемент кіравання ў першую чаргу. Я сутыкаўся з падобнымі цяжкія становішча.

См спасылку на MSDN

http://msdn.microsoft.com/en -us/бібліятэка/system.windows.forms.control.enabled.aspx

0
дададзена

No

<�Моцны> Не в любой сферы добрай практыкі кадавання

  • калі вы зменіце яго на дазволеную = хлусня, ён змяняе налады з гэтым падзеяй ўласцівасці.

У чым праблема кода, будзе рашэнне?

Ва ўласцівасцях элемента кіравання, уключана = ісціна. Вам не трэба пісаць код для яго. Гэта ў дызайне формы.

У адказ на ваш каментар:

Вы можаце выкарыстоўваць патч, які matzone абраў .. асабіста я на карысць выдалення гэтага канкрэтнае кіравання з цыклу, і ў мяне былі праблемы з укладзенымі і бясконцымі завесамі ў vb.net ... Я аддаю перавагу мець менш непатрэбныя змены, у маёй праграме, проста дапамагаюць ліквідаваць памылкі. Гэта азначае, што вы павінны прайсці і забяспечыць код паўторнага ўключэння кантролю заўсёды выклікаецца кожны раз, калі яна змяняецца ў цыкле .. прашу памылак, калі вы спытаеце мяне .. гэта можа быць больш працы ў кароткатэрміновай перспектыве, але было б лепш, каб выбраць элемент кіравання ў першую чаргу. Я сутыкаўся з падобнымі цяжкія становішча.

См спасылку на MSDN

http://msdn.microsoft.com/en -us/бібліятэка/system.windows.forms.control.enabled.aspx

0
дададзена

No

<�Моцны> Не в любой сферы добрай практыкі кадавання

  • калі вы зменіце яго на дазволеную = хлусня, ён змяняе налады з гэтым падзеяй ўласцівасці.

У чым праблема кода, будзе рашэнне?

Ва ўласцівасцях элемента кіравання, уключана = ісціна. Вам не трэба пісаць код для яго. Гэта ў дызайне формы.

У адказ на ваш каментар:

Вы можаце выкарыстоўваць патч, які matzone абраў .. асабіста я на карысць выдалення гэтага канкрэтнае кіравання з цыклу, і ў мяне былі праблемы з укладзенымі і бясконцымі завесамі ў vb.net ... Я аддаю перавагу мець менш непатрэбныя змены, у маёй праграме, проста дапамагаюць ліквідаваць памылкі. Гэта азначае, што вы павінны прайсці і забяспечыць код паўторнага ўключэння кантролю заўсёды выклікаецца кожны раз, калі яна змяняецца ў цыкле .. прашу памылак, калі вы спытаеце мяне .. гэта можа быць больш працы ў кароткатэрміновай перспектыве, але было б лепш, каб выбраць элемент кіравання ў першую чаргу. Я сутыкаўся з падобнымі цяжкія становішча.

См спасылку на MSDN

http://msdn.microsoft.com/en -us/бібліятэка/system.windows.forms.control.enabled.aspx

0
дададзена

Гэта працуе для мяне

Protected Overridable Sub cmdCancel_EnabledChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdCancel.EnabledChanged

    If DirectCast(eventSender, TPDotnet.GUIControls.WinButtonEx).Enabled = False Then
        cmdCancel.Enabled = True
    End If

End Sub

Ўмова апрацоўваюцца карэктна.

0
дададзена

Гэта працуе для мяне

Protected Overridable Sub cmdCancel_EnabledChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdCancel.EnabledChanged

    If DirectCast(eventSender, TPDotnet.GUIControls.WinButtonEx).Enabled = False Then
        cmdCancel.Enabled = True
    End If

End Sub

Ўмова апрацоўваюцца карэктна.

0
дададзена