En Visual Basic.NET no hay problema, ya que cuando estamos en una clase solamente hacemos esto (un ejemplo):
'ProgressBar1.Value = 20 'Si hacemos esto, no reconocera el objeto, tendriamos que agregar...
frmMain.ProgressBar1.Value = 20
Pero al hacer lo mismo en C#, no reconoce las propiedades de la progressbar ni el objeto.. cómo lo puedo solucionar?
Yo lo que hago es en la clase form1 hago un:
Funciones fn = new Funciones();
ProgressBar1.Value = fn.valorBarra();
Donde Funciones es la clase que tiene una funcion que se llama valorBarra que retorna un int.
Ojala quede claro! Sino pregunta
Suerte!
O sea haces una funcion?
A lo mejor me expliqué mal men.. Aver un ejemplo..
Digamos que tenemos "Form1" y agregamos una clase "Clase1"
En Form1 agregué un botón btnComenzar y con un Text = "Comenzar"
Ahora, trabajo con la clase, y al estar allí necesito cambiar el valor Text de btnComenzar a:
btnComenzar = "Pausar"
Pero al escribir btnComenzar, me aparece el error:
El nombre "btnComenzar" no existe en el contexto actual
Es decir como acceder a los controles del Form1 desde la Clase1
SenirX me podrias dar un ejemplo más claro por favor.
Gracias..
claro, no puedes acceder asi de facil, pues cuando hace esto:
Form A = new Form();
creas una nueva instancia, y es alli donde se crean los controles... tendrias que crearte un metodo estatico que llamarias desde la clase para que cambie el texto del control.
Atentamente,
Juan Manuel Lombana
Medellín - Colombia
El problema que tienes suena a que en VB.NET -dios sabe por qué oscura razón- si no especificas el ámbito de las variables miembra éstas se consideran publicas. En C# por el contrario son privadas por defecto -lo que debería ser lógico y normal... di tú que VB nunca fue muy lógico ni muy normal.
Por tanto en VB puedes hacer algo como
form1.BarraProgreso.Value
y en C# no, porque en el primero tienes acceso público a la variable miembro, y en el segundo no
Si lo que quieres es acceder desde una clase a una variable miembro de otra clase y modificarla tienes muchas soluciones. La más sencilla es establecer la variable miembro como pública, algo realmente chapucero.
También puedes exponer la variable miembro como una propiedad, pero en este caso sería como establecerla pública pero escribiendo más.
Algo un poco más elegante es exponer en tu clase form1 el dato que necesitas de la variable miembro como una propiedad (o método), por ejemplo:
public class Form1 : System.Windows.Forms.Form
{
...
private ProgressBar ProgressBar1 ;
...
public int ProgressBarValue
{
get { return this.ProgressBar1.Value; }
set { this.ProgressBar1.Value = value; }
}
...
}
y entonces podrías hacer:
Form1 form1 = new Form1();
form1.ValorBarraProgreso = 20;
Pero en tu caso particular (acceder a form1 desde otra clase) tendrías que tener una referencia a la instancia de form1 para poder acceder a la propiedad que acabas de crear. Eso lo puedes hacer pasándo form1 como referencia en el constructor de la clase y guardándola en una variable miembro privada a la clase (Dependency Injection):
public class class1
{
private Form1 _mainForm;
public class1(Form1 f)
{
//TODO: test f == null
_mainForm = f;
}
public void SetFormProgressBarValue(int value)
{
_mainForm.ProgressBarValue= value;
}
}
Gracias a todos por su ayuda, he solucionado mi problema.
Tema cerrado :P