webForumDet fria alternativet

Dubbla rader i richTextBox

.NET

10 svar · 301 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Hur gör jag för att kunna få dubbla rader(ung som att trycka på enter två gånger)?

if(e.KeyCode == Keys.Enter)
	{
	richTextBox1.Text = richTextBox1.Text + "\n\r";
	}

..fungerar inte. :q

Medlem sedan juni 20022 599 inlägg
#2

Finns säkert nåt väldigt enkelt, men eftersom jag gillar krångliga lösningar så får du ett förslag som bygger på att du fångar och manuellt dubblerar alla return:

// ..
using System.Runtime.InteropServices;

public class dittForm : System.Windows.Forms.Form
{
	//Annan kod här.

	public class DittMessageFilter: IMessageFilter 
	{
		const int WM_KEYDOWN       = 0x100;
		const int WM_LEFTMOUSEDOWN = 0x201;
		private RichTextBox aOwner;
		public DittMessageFilter(RichTextBox aOwner)
		{
			this.aOwner=aOwner;
		}
		[DllImport("user32.dll", CharSet=CharSet.Auto)]
		private static extern IntPtr SendMessage(IntPtr hWnd,
			int msg,
			IntPtr wParam,
			IntPtr lParam);

		public bool PreFilterMessage(ref Message m) 
		{
			if (((m.Msg == WM_KEYDOWN)&&(m.WParam.ToInt32() == 13))
				&&(m.HWnd==aOwner.Handle))
			{
				//Dubblera return.
				SendMessage(aOwner.Handle,m.Msg, m.WParam, m.LParam);
				SendMessage(aOwner.Handle,m.Msg, m.WParam, m.LParam);
				return true;
			}
			return false; //Släpp igenom alla andra.
		}
	}

	private void dittForm_Load(object sender, System.EventArgs e)
	{
		Application.AddMessageFilter(new DittMessageFilter(dinRichTextBox));
		//Annan kod här.
	}

	//Annan kod här.

}

Jag har förutsatt att din rtf-box heter dinRichTextBox och formuläret dittForm.

Medlem sedan mars 20011 880 inlägg
#3

Hej niko och tack för snabbt svar.
Jag fick ett problem med en gång:

[DllImport

Error:

E:\Music_Translater\Translater\Form1.cs(26): The type or
 namespace name 'DllImport' could not be found (are you missing
 a using directive or an assembly reference?)

Jag lade coden under:

public class Form1 : System.Windows.Forms.Form
	{

Som du ser så har jag inte brytt mig om att ändra class Form1 till någonting annat, men det r ju inte där som felet är.

Medlem sedan juni 20022 599 inlägg
#4

Du måste ha med using System.Runtime.InteropServices;
bland de övriga using-direktiven. Se ovan.

Sen behöver du inte ändra namn på nåt, det räcker med att:

Application.AddMessageFilter(new DittMessageFilter(<namnet på din rtf-box>));

ligger i ditt load-event.

Medlem sedan maj 20021 466 inlägg
#5

\n\r är fel. Det ska vara \r\n.

Medlem sedan mars 20011 880 inlägg
#6

Ursäkta, jag såg inte det.
Nu fungerar den kanonbra.
Tack för din hjälp.

Medlem sedan mars 20011 880 inlägg
#7

niko(eller nåon annan)
Har du ett lika "enkelt" och bra script för tappen?
(som det är nu, så fungerar tappen inte i richtextboxen utan den går till nästa kontroll).

Medlem sedan juni 20022 599 inlägg
#8

som det är nu, så fungerar tappen inte i richtextboxen utan den går till nästa kontroll

Men varför gör den det? Hos mig funkar tabben lika bra med eller utan filtret ..

/red: OK, nu fattar jag. Jag trodde du menade att det inte längre gick att tabba till boxen.

Det här kanske: http://www.developerfusion.com/show/129/

Medlem sedan mars 20011 880 inlägg
#9

Tack för hjälpen niko, men det fanns ett mycket enklare sätt.
Det finns en egenskap som heter AcceptsTab och den skulle vara på true.

Medlem sedan juni 20022 599 inlägg
#10

saw skrev:

det fanns ett mycket enklare sätt.

OK. Det finns också ett mycket enklare sätt att fixa radbrytningarna en krånglet med FilterMessage:

if(e.KeyCode == Keys.Enter)
{
	richTextBox1.[b]SelectedText[/b]=System.Environment.NewLine;
}
Medlem sedan maj 20021 466 inlägg
#11

System.Environment.NewLine är exakt samma sak som "\r\n".

När jag testade fungerade dock "\n\r" ändå, trots att det är fel.

Det enda felet med koden i det första inlägget var att radbrytningen kom i slutet istället för vid markörpositionen.

262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)