» »

C# - keypress

C# - keypress

urkrajnc ::

Iskal sem po netu pa nikjer našel (oziroma pravzaprav ne vem kaj prazaprav naj iščem), zato se obračam na vas!

Imam formo, z textboxom. V texboxu je vpisan string ("Vpišite geslo"). Na keypress imam narejen event, da ko se katera koli tipka pritisne, se vključi UseSystemPasswordChar = true; Zdaj pa je težava v tem, da mi prvo črko "poje". Sploh kot da ne prime. Kot da rabi tipko, da se tisto najprej aktivira, šele nato lahko ti vpisuješ svoje geslo. Lahko bi naredil na focus, mouse click ali kaj podobnega, vendar želim imeti, da se izvede samo takrat, če je bila pritisnjena tipka. Dober primer je novi MSN messenger, ko se prvič vpisuješ, piše priimek555@hotmail.com in se ne spremeni, dokler ti ne stisneš tipke.

Hvala za pomoč že v naprej!

Lp, Uroš

Tutankhamun ::

pa si zapomn kaj je pritisnjen, dej passwordchar na true, pol pa tist shranjen znak shran, ali si kej druzga hotu?
AMD Phenom QUAD 9950 Black Edition, 8GB

urkrajnc ::

Jaz hočem, da ko kliknem prvo tipko da kar spodaj piše, z vklopljenim passwordchar.

Tutankhamun ::

private void Form1_Load (object sender, EventArgs e)
{
	textBox1.Text = "Enter Password";
}

private void textBox1_KeyDown (object sender, KeyEventArgs e)
{
	textBox1.UseSystemPasswordChar = true;
}


Sej te ne zastopm čist. Kaj te mot recimo pr tej kodi?
AMD Phenom QUAD 9950 Black Edition, 8GB

urkrajnc ::

private void Form1_Load (object sender, EventArgs e)
{
textBox1.Text = "Enter Password";
}

private void textBox1_KeyDown (object sender, KeyEventArgs e)
{
textBox1.Text = "";
textBox1.UseSystemPasswordChar = true;
}

Moti me to, da ko prvič pritisneš tipko, se tista vrednost ne zapiše v textbox. Upam da razumeš kaj mislim.

Monster ::

private void textBox1_KeyDown (object sender, KeyEventArgs e)
{
textBox1.Text = e.KeyCode().ToString();
textBox1.UseSystemPasswordChar = true;
}
Ka zaboga...

urkrajnc ::

Kaj moraš dodat kakšen using... ?
Ker mi napiše error...

Monster ::

ah .. narobe sm napisal

e.KeyCode.toString() .. bi znalo delat .. vglavnem v e parametru mas kateri gumb je pritisnjen
Ka zaboga...

urkrajnc ::

hmm.. ja to jo zdaj napiše, vendar jo potem označi in jo z naslednjim klikom zbrišeš :S

tbGeslo.Text = e.KeyCode.ToString();
tbGeslo.UseSystemPasswordChar = true;

kod ::

Manjka ti še preverjanje če je to prva pritisnjena črka.

private bool firstKeyDown=true;
private void textBox1_KeyDown (object sender, KeyEventArgs e)
{
if(firstKeyDown)
{
textBox1.Text = "";
firstKeyDown=false;
}
textBox1.Text = e.KeyCode.toString();
textBox1.UseSystemPasswordChar = true;
}

Če boš delal na ta način boš moral poskrbet še za brisanje znakov, ker dvomim da ti bo ob pritisku na backspace komanda e.KeyCode().toString() pobrisala zadnji vnešen znak.
Primer brisanja znaka ob pritisku na backspace:
if(e.KeyCode==Keys.Backspace)
{
if(textBox1.Text.length>0)
textBox1.Text=textBox1.Text.substring(0,textBox1.Text.length-1);
if(textBox1.Text.length==0)
{
textBox1.UseSystemPasswordChar = false;
textBox1.Text = "Enter Password";
firstKeyDown=true;
}
}

urkrajnc ::

if (firstKeyDown)
{
tbGeslo.Text = "";
firstKeyDown = false;
}
tbGeslo.Text = e.KeyCode.ToString();
tbGeslo.UseSystemPasswordChar = true;

To nikakor ne dela. Čudno izpisuje črke v textbox...

if(e.KeyCode==Keys.Backspace) tu pa napiše da Keys.Backspace , da backspace ne obstaja...

Hvala vseeno!

kod ::

Jaz sem ti napisal kodo iz glave(brez preizkušanja v visual studiu), zato se tudi sam malo potrudi in probaj pretipkati kodo v visual studio. Visual studio ima intellisense, tako da ti včasih predlaga rešitev (Npr. ko bi tipkal Keys.backspace ti bi samo predlagalo Keys.Back).

Delujoča koda:
private bool firstKeyDown = true;
private string defaultText = "Enter Password ";

private void tbGeslo_KeyDown(object sender, KeyEventArgs e)
{
int i = tbGeslo.SelectionStart;
if (e.KeyCode == Keys.Back)
{
if (tbGeslo.Text.Length == 1)
{
tbGeslo.UseSystemPasswordChar = false;
tbGeslo.Text = defaultText;
firstKeyDown = true;
}
}
else
{
if (firstKeyDown)
{
tbGeslo.Text = "";
firstKeyDown = false;
i = tbGeslo.SelectionStart;
}
}
}

urkrajnc ::

To dela zdaj super kar si napisal. Zdaj edino ne vem, kako bi naredil UseSystemPasswordChar = true; Če naredim, tako kot si napisal zgoraj, mi "čudno" jemle črke.

Textbox pa je tak narejen, da že ima vrednost, sepravi ko sem ga ustvaril sem mu v Text napisal not vrednost: "Geslo", tako, da ko pritisne prvo tipko za geslo bi moglo spremenit passwordchar v true, pa kar prvo črko vzet.

Sem pa napisal Keys.Back vendar sem mislil, da ne deluje isto kot si ti napisal backspace.

Hvala za tole!

Lp

KaRkY ::

Samo predlagam nisem nič sprobal ampak a nebi bilo lažje naredit da ko dobi textbox focus pobrišeš to kar je not pa nastaviš password char.
Pri tem nebi imel problemov s prvo črko in brisanjem.
When you look long into an abyss, the abyss looks into you

urkrajnc ::

Ja saj bi blo. Ali pa če bi kliknil gor z miško. Vendar hočem met, da bi delalo samo ko klikneš tipko kao (msn varianta). :/ Saj če drugače nebo slo bom pač naredil tako (samo pol je problem če ne uporablja miške, pa samo tabulator :D )

Hvala!

KaRkY ::

GotFocus event se proži takrat ko kontrola dobi focus to pomeni da ga tab tudi proži.
When you look long into an abyss, the abyss looks into you

kod ::

Na tuki sem ti popravil tako da preidemo ob vnosu prve črke nazaj na passwordchar. Pri prvi črki preverjam če je med 32 in 127 zato da v textbox ne zapisujem kod tipk kot so capslock, shift, ...

private bool firstKeyDown = true;
private string defaultText = "Enter Password ";

private void tbGeslo_KeyDown(object sender, KeyEventArgs e)
{
int i = tbGeslo.SelectionStart;
if (e.KeyCode == Keys.Back)
{
if(tbGeslo.SelectionLength==tbGeslo.Text.Length)
{
tbGeslo.UseSystemPasswordChar = false;
tbGeslo.Text = defaultText;
firstKeyDown = true;
}
else if (tbGeslo.Text.Length == 1)
{
tbGeslo.UseSystemPasswordChar = false;
tbGeslo.Text = defaultText;
firstKeyDown = true;
}
}
else if( e.KeyValue >= 32 && e.KeyValue < 127 )
{
if (firstKeyDown)
{
tbGeslo.UseSystemPasswordChar = true;
tbGeslo.Text = e.KeyCode.ToString();
if (e.Modifiers == Keys.Shift)
tbGeslo.Text = tbGeslo.Text.ToUpper();
else
tbGeslo.Text = tbGeslo.Text.ToLower();
firstKeyDown = false;
tbGeslo.SelectionStart++;
}
}
}

urkrajnc ::

@kwodre - najboljši si!
Če se kdaj spoznamo maš v dobrem pivo!

Res najlepša ti dala! (Hvala 1000×) :)

urkrajnc ::

Veš mogoče, kako bi naredil, da bi bil cursor (tisti I-Beam) vedno na začetku vrstice? Sepravi kadar koli bi stisnil na textbox, bi se I-Beam postavil na začetek. I-Beam, upam da se reče tak (mislim tisto črtico, ki ti kaže od kje dalje pišeš tekst). Naj iščem I-Beam property ali kaj drugega?

Hvala in LP!

kod ::

SelectionStart je pozicija tiste črtice.

urkrajnc ::

To je to! Hvala!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C#, TextBox in PopUp forma

Oddelek: Programiranje
61028 (922) MarCar
»

vb.net: dynamic textbox

Oddelek: Programiranje
51103 (993) saule
»

[c#]izvajanje kode

Oddelek: Programiranje
13982 (716) LeQuack
»

Kalkulator-problem

Oddelek: Programiranje
51253 (1186) Tutankhamun
»

[C#]Textbox ki dovoli samo številke

Oddelek: Programiranje
121284 (1148) darkolord

Več podobnih tem