.net - polymorphism for external package -


in project included external package control autocompletetextbox (https://wpfautocomplete.codeplex.com/).

i have on screen keyboard.

whenever user clicks on textbox, keyboard assigns keybord property has , each click on number adds number textbox.

some textbox must autocomplete , others must usual textbox.

the problem here autocompletetextbox doesn't inherits textbox, therefore cannot make unique "assign textbox" keyboard. both controls share property "text", need use.

public partial class keypad : usercontrol {     private autocompletetextbox _controlasignado; //this should generic class or interface     public keypad() { }     public void asignarcontrol(autocompletetextbox control)     {         _controlasignado = control;     }     private void button_click(object sender, routedeventargs e)     {        button button = sender button;        switch (button.commandparameter.tostring())            {            case "back":                if (_controlasignado.text.length > 0)                             _controlasignado.text = _controlasignado.text.remove(_controlasignado.text.length - 1);                break;            default:                _controlasignado.text += button.content.tostring();                break;            }     } 

}

it awesome have "itextbox" both controls implement.

i know can solve issue using reflection want elegant solution.

horas maquina , orden servicio must "textbox", rest autocompletetextbox

you can create wrapper both classes (preferably itextbox interface too), can abstract away differences , use runtime polymorphism:

interface itextbox { string text {get; set;} } abstract class textwrapper<t>: itextbox t: control {     t wrapped;     textwrapper(t textcontrol) {         this.wrapped = textcontrol;     }     text{ get{         return wrapped.text;     }     set (string value) {         wrapped.text = value;     }  } class textboxwrapper: textwrapper<textbox> {} class autocompletetextboxwrapper: textwrapper<autocompletetextbox> {} 

your code this:

public partial class keypad : usercontrol {     private itextbox _controlasignado;     public keypad() { }     public void asignarcontrol(autocompletetextbox control)     {         _controlasignado = new autocompletetextboxwrapper(control);     }     private void button_click(object sender, routedeventargs e)     {        button button = sender button;        switch (button.commandparameter.tostring())            {            case "back":                if (_controlasignado.text.length > 0)                             _controlasignado.text = _controlasignado.text.remove(_controlasignado.text.length - 1);                break;            default:                _controlasignado.text += button.content.tostring();                break;            }     } } 

(i have not tested code, hope general idea looking for.)


Comments

Popular posts from this blog

jOOQ update returning clause with Oracle -

java - Warning equals/hashCode on @Data annotation lombok with inheritance -

java - BasicPathUsageException: Cannot join to attribute of basic type -