Gå til innhold

Anbefalte innlegg

Hei.

 

Jeg driver nå å lager en mini nettleser til et miniprosjekt på skolen. Jeg har litt problemer angående en funksjon.

 

Jeg har da flere tabs i nettleseren min, men tingen er at når jeg trykker på ctrl + T så skal det åpnes en ny tab.

Jeg har en egen metode som åpner en ny tab, og her har jeg metoder som lager en ny browser i taben.

 

Kan skrive opp koden fort for denne metoden:

TabPage tpage = new TabPage();
		tpage.BorderStyle = BorderStyle.Fixed3D;
		browserTabControl.TabPages.Insert(browserTabControl.TabCount - 1, tpage);
		WebBrowser browser = new WebBrowser();
		browser.Navigate(home);
		tpage.Controls.Add(browser);
		browser.Dock = DockStyle.Fill;
		browserTabControl.SelectTab(tpage);
		browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(Form1_DocumentCompleted);
		browser.Navigating += new WebBrowserNavigatingEventHandler(Form1_Navigating);
		browser.Navigated += new WebBrowserNavigatedEventHandler(Form1_Navigated);

 

Problemet mitt her er at jeg også vil ha en KeyDown event på de nye sidene jeg vil ha, og lager derfor en event som er som følger:

browser.PreviewKeyDown += new PreviewKeyDownEventHandler(Form1_PreviewKeyDown);

Når jeg da skriver

private void Form1_PreviewKeyDown(object sender, EventArgs e)
	{
		//Gjør noe
	}

Her inne får jeg ikke bruker if(e.keycode == keys.T && e.control) fordi dette ikke blir sett på som en keydown event av visual studie. Jeg trenger derfor en alternativ metode for å gjøre dette. Noen som har noen forslag til det?

 

Tror jeg har forklart ganske dårlig, så om dere har spørsmål som jeg trenger forklare bedre spør i vei.

 

EDIT: Eventuelt noen som har noen måte å lage en universal keydown? altså en keydown som funker uansett hvilket objekt som er "aktivt"?

Endret av SniKaZ
Lenke til kommentar
Videoannonse
Annonse

KeyDown skal da fortelle deg hvilken bokstav som blir trykket også?...

Er da fult klar over det? men det funker ikke å bruke e.keycode = keys.T && e.controll fordi jeg ikke kan opprette en ny keydown når jeg legger til en ny tab. Siden jeg ikke får lagt til en keydown får jeg heller ikke utnyttet keycode som dermed vil si at jeg ikke får lagt dette til når jeg oppretter et nytt objekt. Derfor hadde jeg trengt hjelp til å lage en universal keydown av noe slag om mulig.

 

Edit: Og som jeg skrev i første post, ved å skrive if(e.keycode == keys.T && e.control) i en keyDown hendelse så vil det jeg skriver inne her bli gjennomført om ctrl + T blir trykket ned. f.eks

if(e.keycode == keys.T && e.control)

{

addNewTab();

}

 

Da vil jeg kjøre metoden addNewTab() når jeg trykker ned ctrl + T,

Skjønner ikke helt hva du vil frem til med å skrive det du gjorde, siden jeg vet at en keydown registrerer hva som blir trykt ned, og med if setningen bestemmer jeg hva som skal skje om ctrl og T blir trykket ned..

Endret av SniKaZ
Lenke til kommentar

Du kan legge til KeyDown på tabbene, men hvorfor vil du det?

Sett KeyPreview til true på formen, og KeyDown skal havne på Formen uansett hvilken kontroll som for fokus.

Aha, men hvordan ordner jeg så keyDown havner på Formen?

Fikk til å ordne sånn keydown at når jeg trykte på ctrl + T så åpnet en ny tab seg uansett hvilken kontroll jeg var på untatt om fokuset var i den nye webBrowseren jeg oppretter ved å legge til en ny tab. Virker som den lever sitt eget liv :p

 

Edit: Var kanskje litt dårlig forklart, men eneste stedet jeg ikke får brukt Ctrl + t er når fokuset er i webbrowseren som jeg oppretter i addNewTab() metoden min.

Endret av SniKaZ
Lenke til kommentar

Vel, det som skjer er at når KeyPreview er satt til true, så sender kontrollene KeyDown videre til Formen. Dermed skal du kunne kapre KeyDown uansett hvilke kontroller på formen som har fokus(merk dog at kontrollen kan hindre at dette skjer eksplisitt). Hvorfor det har noe å si når du kaller AddNewTab() kan jeg ikke helt forstå...

Lenke til kommentar

Vel, det som skjer er at når KeyPreview er satt til true, så sender kontrollene KeyDown videre til Formen. Dermed skal du kunne kapre KeyDown uansett hvilke kontroller på formen som har fokus(merk dog at kontrollen kan hindre at dette skjer eksplisitt). Hvorfor det har noe å si når du kaller AddNewTab() kan jeg ikke helt forstå...

Kan det ha noe med at når jeg er aktiv inne på en webside. F.eks at markøren er aktiv og jeg kan skrive på google.no så blir alle keyDown rettet dit og ikke mot selve formen? altså at det er en slags override som ligger implementer inne i webbrowser objektet?

Skal prøve å teste litt forskjellig så ser jeg om jeg får til noe mere.

 

 

EDIT: Glem det jeg skrev. Virker ikke selv om jeg ikke har noen nettside åpen i webbrowseren.

Men synes det er litt merkelig at når jeg setter KeyPreview til true på formen og har en keydown så funker den på alle objekter som jeg har med untatt nettleseren som jeg legger til.

Endret av SniKaZ
Lenke til kommentar

Da må du vel neste binde KeyDown til alle WebBrowser kontroller du lager. Dette er ikke spesielt vanskelig:

 

newWebBrowser.KeyDown += Form_KeyDown;

Går ikke. Jeg ser nå hva muligens problemet er. Det er ikke mulig å legge til KeyDown hendelse på objektet webBrowser, den har ikke noe sånt.

Eneste som er noe lignende er en PreviewKeyDown, men den har jo ikke direkte noe å si overfor keyDown siden jeg uansett ikke får lagt til en keyDown i webBrowser.

Lenke til kommentar

Fikk det til sånn delvis nå så lenge jeg ikke er aktiv i et felt. F.eks om jeg er aktiv i skrivefeltet i google så går det ikke, mens om jeg trykker utenfor feltet sånn at den slipper innskrivningsfeltet funker det.

 

Får klare meg med det foreløpig :)

 

Uansett. Takk for hjelpen! :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...