PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RTF füllen in c#


Lord Nikon
2004-02-06, 16:35:14
Hi,
ich versuche gerade einen Array in eine RTF zu füllen.
Wenn ich einfach

int [] prime = new int [11111111];
// Array ist mittlerweile gefüllt
RTF.Text=prime[0]
RTF.Text=prime[1]

wirds logischerweise überschrieben.
Wenn ich

for (int i=0;i<prime.Length;i++)
{
RTF.Lines[i]=Convert.ToString(prime[i]);
}

versuche kommt immer ein OutOfRange Array. Ich habe schon rausgefunden , das es definitiv am RTF liegt , da beim füllen keine Fehlermeldung kommt. Muss ich irgendeine Eigentschaft ändern oder was mache ich falsch?
Ich programmiere mit dem c# Builder.
EDIT:
Rechtschreibung

Tom Servo
2004-02-06, 16:54:51
Häng den Text doch einfach mit

RTF.Text += text + "\r\n";

an.


foreach (int n in prime) {
RTF.Text += n.ToString() + "\r\n";
}


Wenn das Lines-Property kein Wachsen des Arrays zulässt, kannst du dagegen nichts tun. Es lassen sich dann nur bereits bestehende Zeilen ersetzen.

Du könntest auch den Text zuerst mit einem StringBuilder-Objekt zusammenbauen und dann später komplett an RTF.Text zuweisen.

Lord Nikon
2004-02-06, 17:23:47
for (int i=0;i<prime.Length;i++)
{
memo.Text+=Convert.ToString(prime[i])+"\r\n";
}


dürfte das selbe sein oder ?
Es kommt immer noch der Fehler.
Hier mal meine Array Deklartion:

int lange=Convert.ToInt32(txtbis.Text);

int [] prime = new int [l000000];
for (int i=0;i<=prime.Length;i++)
{
prime[i]=0;
}

Tom Servo
2004-02-06, 17:36:57
Ich würde vermuten, das es da eine maximale Anzahl an Zeilen gibt die so ein RTF darstellen kann.

Es gibt da das MaxLength Property bei RichTextBox. Müsstest du vmtl. dann auf 1000000 setzen.

Dann sollte dein Code funktionieren oder auch der hier:

for (int i=0; i < 1000000; ++i) {
RTF.Text += i.ToString() + "\r\n";
}

Tom Servo
2004-02-06, 17:45:24
Naja, oder auch nicht. MaxLength hat wohl mit den Zeilen nichts zu tun sondern dem Text selber. Vielleicht kann man einfach nicht so eine riesige Anzahl Zeilen haben. Du musst vielleicht mehrere Zahlen pro Zeile ausgeben.



Property Value
The number of characters that can be entered into the control. The default is zero.


When this property is set to zero, the maximum length of the text that can be entered in the control is limited only by available memory. You can use this property to restrict the length of text entered in the control for values such as postal codes and telephone numbers. You can also use this property to restrict the length of text entered when the data is to be entered in a database. You can limit the text entered into the control to the maximum length of the corresponding field in the database.

Lord Nikon
2004-02-06, 17:54:08
hab den Fehler gefunden.

for (int i=0;i<=prime.Length;i++)
muss
for (int i=0;i<prime.Length;i++)
sein

Lines kann ich trotzdem nicht benutzen auch wenn der Zahlenbereich kleiner ist.

Lord Nikon
2004-02-07, 11:41:13
Irgendwie regt mich die RTF Komponente auf.

StreamWriter sr = File.CreateText("c:\\Primzahlentemp.txt");
for (int i=0;i<lange;i++)
{
if (prime[i]!=0)
{
sr.WriteLine(Convert.ToString(prime[i]));
}
else
{
break;
}
}
sr.Close();
RTF.Dock = DockStyle.Fill;
RTF.LoadFile("c:\\Primzahlentemp.txt");

Die Datei wird ordnungsgemäß richtig angelegt und der Inhalt ist auch in Ordnung. IMmer wenn der die Datei laden will kommt es zu einer "ECountered unhandled exception class Argument Excpetion".

BTW:
Gibt es in c# eine Methode die das selbe macht wie GetTickCount() ?
PS:
Sry für die dämlichen Fragen , ich habe gestern erst begonnen c# zu lernen.

Tom Servo
2004-02-07, 13:53:42
Meine Vermutung wäre, dass eine Datei im RTF Format erwartet wird. Du hast aber nur einen normale Text-Datei.

RichTextFormat sieht intern aber ganz anders aus:

{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1031\deflangfe1031{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f30\froman\fcharset238\fprq2 Times New Roman CE;}{\f31\froman\fcharset204\fprq2 Times New Roman Cyr;}

...usw...

Tom Servo
2004-02-07, 14:13:57
Wegen GetTickCount() würde ich http://groups.google.com/ empfehlen, da ja alle C#-Umsteiger diese und ähnliche Probleme hatten. Du wirst deshalb schon durch suchen nach "C# GetTickCount" sofort einige Lösungen finden. :)

Ich musste allerdings erstmal mit Google suchen, was GetTickCount() überhaupt macht.



SFrom: "Christoph Schittko" <ChristophDotNetINVALID@austin.rr.com>
References: <5eb101c2bda9$135cb280$d3f82ecf@TK2MSFTNGXA10>
Subject: Re: Similating GetTickCount functionality
Date: Thu, 16 Jan 2003 16:10:08 -0600
Lines: 57
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.3718.0
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3718.0
Message-ID: <OwZVWvavCHA.2292@TK2MSFTNGP10>
Newsgroups: microsoft.public.dotnet.languages.vc
NNTP-Posting-Host: 216.62.199.3


System.DateTime.Now.Ticks is counted in 100 nanosecond intervals. I
*believe* that you get to milliseconds by multiplying by 10 instead of
dividing.

If you want something in milliseconds you could use

Environment.TickCount

HTH,

--
Christoph Schittko
Software Architect

Lord Nikon
2004-02-07, 15:37:47
thx für die Antwort. Die Methode wird überlagert und deshalb habe ich nicht gesehen ,dass ich noch einen anderen zusatz übergeben kann und die Zeitmessung geht auch gut.

RTG.LoadFile("c:\\Primzahlentemp.txt",RichTextBoxStreamType.PlainText);