webForumDet fria alternativet

Composite Control

10 svar · 327 visningar · startad av DavidB

DavidBMedlem sedan jan. 20001 372 inlägg
#1

Goddag.

Det är så att jag håller på att göra en egen kontroll som endast skall innehålla en TextBox som jag har satt lite speciella värden på. Nu är bara det problemet att jag vill sätta samma id på dessa:

namespace wsc {
	public class MyTextBox : Control, INamingContainer {
	
		public String ID {
			set {
				this.EnsureChildControls();
				((TextBox)Controls[0]).ID = value;
			}
		}
		
		protected override void CreateChildControls() {
			TextBox box = new TextBox();
			box.Enabled = false;
			this.Controls.Add(box);
		}
	}
}

Det jag vill ha är så att när man sätter <MinKontroll:Kontroll id="hej" runat="server" /> så skall TextBoxen få vädet på Id som sitt Id. När jag kör koden ovan så blir det nåt fel. Tror det är för att kontrollerna har samma id eller nåt? Nån som vet?

Sen undrar jag även hur man lägger till egenskaper på textboxen som inte finns förutbestämda på Textboxen, t ex.

box.OnClick = "kod";

Får när jag använder detta ett felmeddelande att TextBox inte stödjer OnClick.

renholmMedlem sedan apr. 20012 266 inlägg
#2

När du vill modifiera endast en kontroll tror jag att det är lättare/bättre att försöka ärva från den kontrollen och sedan göra overrides på de funktion du vill ha annurlunda.

För att lägga till OnClick, använd detta:
box.Attributes.Add(String key , String value)

DavidBMedlem sedan jan. 20001 372 inlägg
#3

renholm skrev:

När du vill modifiera endast en kontroll tror jag att det är lättare/bättre att försöka ärva från den kontrollen och sedan göra overrides på de funktion du vill ha annurlunda.

tack, men jag förstår inte riktigt vad jag skaall göra, jag vet hur man gör för ett arv men det andra. du kan inte ge ett exempel på detta?

renholmMedlem sedan apr. 20012 266 inlägg
#4

Kan inte hitta något riktigt bra exempel men här är ett http://www.fawcette.com/vsm/2002_06/magazine/columns/desktopdeveloper/. Har även ett exempel på hur man ärver från en textbox och lägger till en validator: http://www.codeproject.com/aspnet/textboxwithvalidator.asp

DavidBMedlem sedan jan. 20001 372 inlägg
#5

tackar, ahr nu kommit såhär långt:

public class ColorBox : TextBox {
	private string _id;
	private string value;

	public string id {
		get {
			return _id;
		} set {
			_id = value;
		}
	}

	protected override void OnInit(EventArgs e) {
		value = "massa kod " + _id.ToString() + "";
		base.Enabled = false;

	}

	protected override void Render(HtmlTextWriter w) {
		base.Render(w);
	}
}

nu är det bara så att det blir fel om jag lägger till:
base.Attributes.Add("OnClick",value);

Nån ide?

renholmMedlem sedan apr. 20012 266 inlägg
#6

Vad blir det för fel, annars svårt att felsöka om man inte vet :P

DavidBMedlem sedan jan. 20001 372 inlägg
#7

jag löste det och fick det att fungera, men så grejade jag lite till och fick då följande fel:
Parser Error Message: Ambiguous match found.

Min kod ser ut följande:

public class ColorBox : TextBox {
	private string _id;
	private string value;

	public string id {
		get {
			return _id;
		} set {
			_id = value;
		}
	}

	protected override void OnInit(EventArgs e) {
		value = "massa kod " + _id.ToString() + "";
		base.Enabled = false;
		base.Attributes.Add("OnClick", value);
	}

	protected override void Render(HtmlTextWriter w) {
		base.Render(w);
	}
}
renholmMedlem sedan apr. 20012 266 inlägg
#8

Vilken rad då? :)
Men felet beror på att ett object finns "på flera olika ställen" dvs kompilatorn vet inte vilket object den ska använda. T.ex Bla.Bla.Object eller Bla.Object.

DavidBMedlem sedan jan. 20001 372 inlägg
#9

fixade det, tackar så mycket för hjälpen

PatrikBMedlem sedan mars 20002 836 inlägg
#10

Och hur fixade du det?

Vi brukar skicka upp kod för lösningen, om det blir en lösning, för att andra ska slippa ställa samma fråga.

Vill man ha hjälp, får man även dela med sig.

just my €0.02
PatrikB

DavidBMedlem sedan jan. 20001 372 inlägg
#11

ooops, sorry :)

vet inte riktigt hur jag löste det men jag skickar med hela koden:

public class ColorBox : TextBox {
	private	TextBox sc;
	private string _id;

	public override string ID {
		get {
			return _id;
		} set {
			_id = value;
		}
	}

	protected override void OnInit(EventArgs e) {
		base.Enabled = false;

		sc = new TextBox();
		sc.Enabled = false;
		Controls.Add(sc);
	}

	protected override void Render(HtmlTextWriter w) {
		base.Render(w);
		sc.RenderControl(w);
	}
}
127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)