Pregunta

Soy nuevo en C #, pero no es nuevo en la codificación --being haciendo por casi dos decades--, y tiene un problema con las propiedades de un control personalizado que estoy construyendo, que hereda de un grupo especial. Cuando pongo mis propiedades, puedo verlos en la lista de propiedades de diseño e incluso puede establecerlos, pero cuando se ejecuta mi pequeña aplicación, parece que estas propiedades valores no se utilizan. Lo mismo sucede si cambio de una propiedad mediante programación: ningún error, pero mi control no hace nada, es como si no se establecen correctamente. Sin embargo, si lo hago programáticamente whithin la clase, que hacen el trabajo. Mi conjetura es que algo en mis propiedades establecido / cosas no es correcto. Consulte el siguiente trozo de código de cómo lo estoy haciendo:

public class ColorStrip : Panel
{
    // properties
    // ------------------------------------------
    // size of color clusters (boxes)
    private int _clusterSize = 20;
    // controls if show the buttons panel
    private Boolean _showButtons;

    // property setters/getters
    // ------------------------------------------
    // clusterSize...
    public int clusterSize
    {
        get { return _clusterSize; }
        set { _clusterSize = value; }
    }
    // showButtons...
    public Boolean showButtons
    {
        get { return _showButtons; }
        set { Console.Write(_showButtons); _showButtons = value; }
    }
    ....

Así que en mi forma, por ejemplo, en la carga o incluso en algún lugar un evento click, si pongo colorStrip1.showButtons = false; o colorStrip1.showButtons = true; cualquiera que sea (colorStrip1 sería el nombre de la instancia después de realizar el control en el formulario en modo de diseño) ... Console.Write dice siempre 'falso'; Incluso si lo fijo en la lista de propiedades de diseño como 'verdadero' no reflejará el valor establecido, incluso si no cumplo a true, nunca va a cambiar externamente. ¿Algunas ideas? Ninguno de los métodos de obtener el valor de la propiedad nueva y se instaló el exterior ni, obviamente, lo captador / definidor no está funcionando. Me parece que no estoy haciendo bien el conjunto de manera que o conseguir mis propiedades fuera de la clase. Sólo funciona en su interior, como un amuleto ... Cualquier ayuda ... muy apreciar!

Saludos

litio

p.s. SOLUCIÓN PARA ACLARAR:

Configuración de la propiedad en este caso no funcionó porque yo estaba tratando de utilizar un nuevo valor de ajuste dentro del constructor , que parece que no puede obtener los nuevos valores, ya que es, además, la construcción la cosa. Si I cambiar el valor de la propiedad en el modo de diseño> Editor de propiedades o en el código externo al objeto, por ejemplo en caso de carga es de la forma del padre, Se va a cambiar, pero legible para todos los métodos, excepto el constructor , , por supuesto:)

¿Fue útil?

Solución

Es probable que un número de la orden de ejecución. Su colocador propiedad justo establece una variable, pero en realidad no lo gatillo del mando para actualizar el estado en relación con esta variable (por ejemplo, la adición o mostrar los botones supongo).

Cuando se establece la propiedad befre el resto de la inicialización se hace, se utiliza el valor, de lo contrario no se debe a que durante la marcha inicial, el valor por defecto sigue siendo el valor de la propiedad.

Es necesario actuar sobre el organismo, aquí hay algo de pseudocódigo para ilustrar:

set {
  _showButtons = value;
  if (alreadyInitialized) {
    UpdateButtons();
  }
}

Nota: asegúrese de que el primer conjunto de valor, a continuación, actuar - de lo contrario se termina con el valor antiguo (al igual que su Console.Write() está haciendo)

.

Otros consejos

El código citado no parece problemático. ¿Seguro que está haciendo referencia a la misma instancia de COLORstrip? Además, revise su archivo .Designer.cs para asegurarse de que el código de establecer la propiedad está ahí.

De hecho, trata de simplificar el código mediante el uso de las propiedades de auto-aplicación:

public int clusterSize { get;set;}
public Boolean showButtons {get;set;}

public ColorStrip() { ... clusterSize = 20; ... }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top