OBJECT OU CONTROL?
Às vezes, preciso passar um controle como parâmetro de um sub ou função para poder alterar suas propriedades.
O que é melhor: passar como Object ou Control? Não vejo diferença.
Também não vejo diferença entre passar ByVal ou ByRef.
Poderia esclarecer a questão?
Obrigado.
Property Controls As object
read-only
Member of VB.UserControl
A collection whose elements represent each control on a form, including elements of control arrays.
Se a [Ô]hierarquia[Ô] for essa:
Object
|
|---> Control
Como a relação em herança é do tipo [ô]é um[ô], deve ser por isso que não dá problema quando vc usa um ou outro.
Quanto ao ByRef e o ByVal, faça esse teste. Uma vez com Byval na função calcula e outra com byRef e tire sua conclusões:
Function calcula(ByVal x As Integer) As Integer
x = x * 2
calcula = x
End Function
Private Sub Form_Load()
Dim x As Integer
x = 3
MsgBox calcula(x)
MsgBox x
End Sub
Citação::
o byval voce apenas passa o valor para o parametro, ja o byref voce passa a referencia, por exemplo se vc passa um byref oGrid as msflexgrid tudo que voce inserir nesse ogrid ele autmaticamente lanca no grid referente ao parametro,,, funciona como um link....
Eu entendi como funciona o ByVal e ByRef.
Acontece que quando eu passo um controle como Objeto ou Control tanto faz.
Para outras variáveis isso não acontece.
Citação::
Tanto faz, porque tudo no VB6 é originado de objeto, ou seja, tudo que pode ser [Ô]transformado[Ô] em object vai estar valendo. Se o parâmetro fosse de um tipo de objeto especÃfico e você passa como parâmetro um outro objeto(por exemplo, o parâmetro espera uma textbox e você passa um botão), aà poderia ter algum problema, dependendo do que o método faz.
Entendi isso também.
O que não entendo é que se passamos alguma coisa (objeto, controle, string, etc.) usando ByVal, então não deveria ser permitido fazer alterações. Seria uma forma de proteger contra alterações acidentais, que aliás é uma das funções de ByVal e ByRef. Mas quando se passa um Control usando ByVal as alterações são permitidas. Isso aà é que não estou entendendo.
Citação:Mas quando se passa um Control usando ByVal as alterações são permitidas. Isso aà é que não estou entendendo.
Nada impede de se alterar valores de um parâmetro passado para um método. Seja ele do tipo que for, pode ser alterado normalmente, não há nenhuma restrição quanto à isso.
Citação:Nada impede de se alterar valores de um parâmetro passado para um método. Seja ele do tipo que for, pode ser alterado normalmente, não há nenhuma restrição quanto à isso.
Como assim???
Tente esse código:
Private Sub Command1_Click()
Dim S As String
S = [Ô]abc[Ô]
Alterar S
MsgBox S
End Sub
Private Sub Alterar(ByRef St As String) [ô]<--- mude aqui para ByVal e veja a diferença.
St = [Ô]xyz[Ô]
End Sub