2009-10-09 8 views
0

J'ai un contrôle qui hérite d'un autre contrôle (TxTextControl). J'ai une propriété SelectedText qui bascule la propriété SelectedText de base, ce qui est apparemment nécessaire car mon contrôle implémente une interface avec cette propriété. Le code est le suivant:Erreur de conception dans le formulaire pour l'objet avec

public string SelectedText 
{ 
    get 
    { 
    return base.Selection.Text; // Error here (#1042) 
    } 
    set 
    { 
    if (base.Selection == null) 
    { 
     base.Selection = new TXTextControl.Selection(0, 0); 
    } 
    base.Selection.Text = value; 
    } 
} 

Lorsque je lâche ce contrôle sur un formulaire, aucun problème. Il compile et s'exécute. Tout a l'air génial. Cependant, quand j'enregistrez, fermez puis rouvrez le formulaire, le concepteur de formulaire montre cette erreur:

Object reference not set to an instance of an object.
1. Hide Call Stack

at Test.FormattedTextBox2.get_SelectedText() in C:\Projects\Test\FormattedTextBox2.cs:line 1042

Quelqu'un sait ce qui se passe? Je suis sur le point de sortir mes derniers cheveux ...

MISE À JOUR:
La réponse de darkassisin93 n'était pas tout à fait correcte, mais c'était parce que mon code posté n'était pas exactement précis. J'avais besoin de tester si base.Selection était null avant d'essayer d'accéder à une propriété de cet objet. En tout cas, cette réponse m'a conduit dans la bonne direction. Voici la solution réelle:

public string SelectedText 
{ 
    get 
    { 
    string selected = string.Empty; 
    if (base.Selection != null) 
    { 
     selected = base.Selection.Text; 
    } 
    return selected; 
    } 
    set 
    { 
    if (base.Selection == null) 
    { 
     base.Selection = new TXTextControl.Selection(0, 0); 
     // Have to check here again..this apparently still 
     // results in a null in some cases. 
     if (base.Selection == null) return; 
    } 
    base.Selection.Text = value; 
    } 
} 
+0

pouvez-vous poster le contenu de FormattedTextBox2.cs, en particulier la ligne 1042? –

+0

La question a été mise à jour pour indiquer que l'erreur était liée au code affiché et que la ligne s'est produite. –

Répondre

2

Essayez de remplacer

return base.SelectedText; 

avec

return base.SelectedText ?? string.Empty; 

Il est très probablement parce que SelectedText propriété de la classe de base est définie sur null.

+0

Merci. Cela ne l'a pas fait, mais cela m'a conduit dans la direction de l'écriture. Je vais mettre à jour ma question pour refléter la solution actuelle. C'était en effet un problème nul et une fois que j'ai été testé, cela fonctionne maintenant. –

Questions connexes