ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   SetFocus in a custom dialog (https://www.excelbanter.com/excel-programming/416956-setfocus-custom-dialog.html)

[email protected]

SetFocus in a custom dialog
 
Hi

I have a logon dialog created with two fields (username & password)
and two buttons (login and cancel).

I'm checking with an event if the fields are empty and enable the
login-button only then.

Private Sub txtPwd_AfterUpdate()
If Me.txtUsr.Value < "" And Me.txtPwd.Value < "" Then
Me.cmdLogin.Enabled = True
Me.cmdLogin.SetFocus
Else
Me.cmdLogin.Enabled = False
Me.txtPwd.SetFocus
End If
End Sub

If both fields (Username and Password) are different than "" then I
enable the login-button. And I also want to set the focus on this
login button. But although I do this using the Me.cmdLogin.SetFocus
the focus is set to the next item (the cancel-button). I've tried to
set it on the password-field or any other object, but it just isn't
setting the focus on the login-button.

What am I doing wrong?

Any hint appreciated.

Matthias

Dave Peterson

SetFocus in a custom dialog
 
I would use both textbox_change procedures to decide to enable/disable the login
button. I wouldn't move focus to that button at all.

Option Explicit
Private Sub CommandButton1_Click()
MsgBox "Login was clicked"
Unload Me
End Sub
Private Sub CommandButton2_Click()
MsgBox "Cancel was clicked"
Unload Me
End Sub
Private Sub TextBox1_Change()
Call EnableLoginCheck
End Sub
Private Sub TextBox2_Change()
Call EnableLoginCheck
End Sub
Private Sub UserForm_Initialize()
With Me.CommandButton1
.Caption = "Login"
.Default = True
.Enabled = False
.TakeFocusOnClick = False
End With
With Me.CommandButton2
.Caption = "Cancel"
.Cancel = True
.TakeFocusOnClick = False
End With
Me.TextBox1.SetFocus
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Call CommandButton2_Click
End If
End Sub
Sub EnableLoginCheck()

Dim Ok As Boolean
Ok = True
If Trim(Me.TextBox1.Value) = "" Then
Ok = False
End If
If Trim(Me.TextBox2.Value) = "" Then
Ok = False
End If

Me.CommandButton1.Enabled = Ok

End Sub


wrote:

Hi

I have a logon dialog created with two fields (username & password)
and two buttons (login and cancel).

I'm checking with an event if the fields are empty and enable the
login-button only then.

Private Sub txtPwd_AfterUpdate()
If Me.txtUsr.Value < "" And Me.txtPwd.Value < "" Then
Me.cmdLogin.Enabled = True
Me.cmdLogin.SetFocus
Else
Me.cmdLogin.Enabled = False
Me.txtPwd.SetFocus
End If
End Sub

If both fields (Username and Password) are different than "" then I
enable the login-button. And I also want to set the focus on this
login button. But although I do this using the Me.cmdLogin.SetFocus
the focus is set to the next item (the cancel-button). I've tried to
set it on the password-field or any other object, but it just isn't
setting the focus on the login-button.

What am I doing wrong?

Any hint appreciated.

Matthias


--

Dave Peterson

[email protected]

SetFocus in a custom dialog
 
On 12 Sep., 17:57, Dave Peterson wrote:
I would use both textbox_change procedures to decide to enable/disable the login
button. *I wouldn't move focus to that button at all.

Option Explicit
Private Sub CommandButton1_Click()
* * MsgBox "Login was clicked"
* * Unload Me
End Sub
Private Sub CommandButton2_Click()
* * MsgBox "Cancel was clicked"
* * Unload Me
End Sub
Private Sub TextBox1_Change()
* * Call EnableLoginCheck
End Sub
Private Sub TextBox2_Change()
* * Call EnableLoginCheck
End Sub
Private Sub UserForm_Initialize()
* * With Me.CommandButton1
* * * * .Caption = "Login"
* * * * .Default = True
* * * * .Enabled = False
* * * * .TakeFocusOnClick = False
* * End With
* * With Me.CommandButton2
* * * * .Caption = "Cancel"
* * * * .Cancel = True
* * * * .TakeFocusOnClick = False
* * End With
* * Me.TextBox1.SetFocus
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
* * If CloseMode = vbFormControlMenu Then
* * * * Call CommandButton2_Click
* * End If
End Sub
Sub EnableLoginCheck()

* * Dim Ok As Boolean
* * Ok = True
* * If Trim(Me.TextBox1.Value) = "" Then
* * * * Ok = False
* * End If
* * If Trim(Me.TextBox2.Value) = "" Then
* * * * Ok = False
* * End If

* * Me.CommandButton1.Enabled = Ok

End Sub



wrote:

Hi


I have a logon dialog created with two fields (username & password)
and two buttons (login and cancel).


I'm checking with an event if the fields are empty and enable the
login-button only then.


Private Sub txtPwd_AfterUpdate()
* * If Me.txtUsr.Value < "" And Me.txtPwd.Value < "" Then
* * * *Me.cmdLogin.Enabled = True
* * * *Me.cmdLogin.SetFocus
* * Else
* * * *Me.cmdLogin.Enabled = False
* * * *Me.txtPwd.SetFocus
* * End If
End Sub


If both fields (Username and Password) are different than "" then I
enable the login-button. And I also want to set the focus on this
login button. But although I do this using the Me.cmdLogin.SetFocus
the focus is set to the next item (the cancel-button). I've tried to
set it on the password-field or any other object, but it just isn't
setting the focus on the login-button.


What am I doing wrong?


Any hint appreciated.


Matthias


--

Dave Peterson


Hi Dave

Thanks for your answer.

I've changed it according to your reply, but still, even with no
SetFocus the "cursor" jumps to the cancel button instead of the login
button when I have changed the password-field. If I don't change the
password-field it tabs correctly to the login-button.

Matthias

Dave Peterson

SetFocus in a custom dialog
 
How is the focus jumping to the next control?

Are you hitting enter or tab?

There is a .tabindex property that you can use to make sure the tab/enter takes
you to the correct next control.

And there is a .tabstop property that you can use to skip any of the controls
you want.



wrote:

<<snipped
Hi Dave

Thanks for your answer.

I've changed it according to your reply, but still, even with no
SetFocus the "cursor" jumps to the cancel button instead of the login
button when I have changed the password-field. If I don't change the
password-field it tabs correctly to the login-button.

Matthias


--

Dave Peterson

[email protected]

SetFocus in a custom dialog
 
On 12 Sep., 20:55, Dave Peterson wrote:
How is the focus jumping to the next control?

Are you hitting enter or tab?

There is a .tabindex property that you can use to make sure the tab/enter takes
you to the correct next control.

And there is a .tabstop property that you can use to skip any of the controls
you want.


Dave

I'm pressing the tab-key to move out of the password-field and the
focus is then set to the cancel-button.

TabIndex 0 is the label for the username-field with TabStop = False
(so that I can use the accelerator)
TabIndex 1 is the username-field with TabStop = True
TabIndex 2 is the label for the password-field with TabStop = False
(so that I can use the accelerator)
TabIndex 3 is the password-field with TabStop = True
TabIndex 4 is the Login-button with TabStop = True
TabIndex 5 is the Cancel-button with TabStop = True

Matthias

Dave Peterson

SetFocus in a custom dialog
 
If you set the tabstop to false, then you're going to skip that control.

TabIndex 2 is the label for the password-field with TabStop = False




wrote:

On 12 Sep., 20:55, Dave Peterson wrote:
How is the focus jumping to the next control?

Are you hitting enter or tab?

There is a .tabindex property that you can use to make sure the tab/enter takes
you to the correct next control.

And there is a .tabstop property that you can use to skip any of the controls
you want.


Dave

I'm pressing the tab-key to move out of the password-field and the
focus is then set to the cancel-button.

TabIndex 0 is the label for the username-field with TabStop = False
(so that I can use the accelerator)
TabIndex 1 is the username-field with TabStop = True
TabIndex 2 is the label for the password-field with TabStop = False
(so that I can use the accelerator)
TabIndex 3 is the password-field with TabStop = True
TabIndex 4 is the Login-button with TabStop = True
TabIndex 5 is the Cancel-button with TabStop = True

Matthias


--

Dave Peterson

[email protected]

SetFocus in a custom dialog
 
On 12 Sep., 21:40, Dave Peterson wrote:
If you set the tabstop to false, then you're going to skip that control.

But it is NOT set to false. It is TRUE on the login-button.

It is only set to false on the LABELS for the two fields.

Matthias

Dave Peterson

SetFocus in a custom dialog
 
I don't have any more guesses.

I'd double check those .tabindex's, though.

wrote:

On 12 Sep., 21:40, Dave Peterson wrote:
If you set the tabstop to false, then you're going to skip that control.

But it is NOT set to false. It is TRUE on the login-button.

It is only set to false on the LABELS for the two fields.

Matthias


--

Dave Peterson


All times are GMT +1. The time now is 10:00 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
ExcelBanter.com