|
Hi!
I have been working with hidden text in RichTextBoxes some time ago and couldn't find suspicious behaviour.
Since you didn't write how you insert hidden text and didn't give the exact RTF string, all I can say is that selection seemed to be consistent if you are aware that a RTB's Text property will contain the hidden text (although the RTB doesn't show it) and the values used for selection are relative to the contents of your Text property.
Regards,
mav
|
|
|
|
|
I insert the Rtf string as follows at the current position of selection.
textBox.SelectedRtf = "{\rtf1\ansi\v " + text + "\v0}"
I also am aware that the Text property will have the hidden text in it. The Find method returns the correct index. The problem occurs when I try to move the selection to the location returned by Find and set the length of selected text.
Please let me know if the above insertion is not valid.
Thanks for your help,
Eric
|
|
|
|
|
I just tried it.
Created a RTB and then wrote:
richTextBox1.Text = "test";
richTextBox1.Select(2,0);
string text = "hidden";
richTextBox1.SelectedRtf = @"{\rtf1\ansi\v " + text + @"\v0}";
richTextBox1.Select(0,0); The RTB showed just "test", the cursor was at the beginning of the line, as expected.
Then I tried to select something via code:
richTextBox1.Select(1,8); and, like I expected, the RTB selected "es" inside "test".
That's what I meant in my previous posting: richTextBox1.Text is "tehiddenst" and selection has to occurr according to this string. In my sample the selection goes from the first 'e' (index 1) 8 characters to the right ('ehiddens'). Since the hidden part isn't shown, only 2 characters are shown as selected, even though 8 characters actually are selected.
Regards,
mav
|
|
|
|
|
Thanks for clearing this up.
I won't be able to try this out until later.
I'll let you know if I'm successful.
Thanks
Eric
|
|
|
|
|
Ok, thanks again for the input.
I have looked at what is going on and still believe I'm doing things right (probably wrong since it doesn't work, but oh well!).
I created a little test app to do what you did and was able to create the issue I'm having. If you don't mind please try:
Create an form with richTextBox1 and button1 objects.
Use the code below:
private void button1_Click(object sender, EventArgs e)<br />
{<br />
int index = this.richTextBox1.Find("hidden2",<br />
RichTextBoxFinds.MatchCase | RichTextBoxFinds.NoHighlight);<br />
this.richTextBox1.Select(0, index);<br />
int temp = this.richTextBox1.SelectionStart;<br />
int temp2 = this.richTextBox1.SelectionLength;<br />
this.richTextBox1.SelectedText = "Eric";<br />
}<br />
<br />
private void Form1_Load(object sender, EventArgs e)<br />
{<br />
this.richTextBox1.SelectedRtf = @"{\rtf1\ansi te\v hidden1\v0st1\par}";<br />
this.richTextBox1.SelectedRtf = @"{\rtf1\ansi te\v hidden2\v0st2\par}";<br />
}<br />
Now if you run the app with the first two lines of SelectedRtf statements (basically like your example) and run the app the selection process in the button click method works well; the resulting text in the RTB is: "Ericst2".
Now if you use the other two lines of SelectedRtf statemsnt (basically what I'm doing) you will find the Select doesn't work. And behaves like I mentioned and the RTB shows: "test1Erictest2." Note the SelectionStart and SelectionLength properties don't match what was sent to Select.
Thanks,
Eric
|
|
|
|
|
Ok, now I think I see what the problem is.
The RTB seems to have a problem when the RTF starts with hidden text.
I doubt that the behaviour is created by the .NET wrapper around the underlying rich edit control, but you can try to reproduce the same effect with an MFC program, for example, to verify this.
Then you should try to contact Microsoft and let them know that there's a problem with the rich edit control, they might even be able to fix it easily and produce a hotfix.
Some time ago I had a different problem with the RTB (the undo/redo buffer was cleared when you queried its Text property) and received a new version of the rich edit control that didn't show the behaviour.
Altogether, I'm very content with the performance of Microsoft's support, so you should give it a try.
Regards,
mav
|
|
|
|
|
I don't have the ability to make an MFC program, but I will definately let Microsoft support know.
Thanks for your help.
At least now I don't feel stupid!
Eric
|
|
|
|
|
When I try to reference an exe file it says it doesn't allow exe or com to be referenced, but it's a .NET exe... so there must be some way to reference it..
Anyone knows how to do that in visual studio 2003?
|
|
|
|
|
alexrait1 wrote: but it's a .NET exe... so there must be some way to reference it..
Why must there be?
A technique that is used a lot where I work is to have an EXE project that is just a bootstrap to launch code in DLLs (in other words there is only one class - with a main method). That way if anything needs to be referenced it can be.
ColinMackay.net
"Man who stand on hill with mouth open will wait long time for roast duck to drop in." -- Confucius
"If a man empties his purse into his head, no man can take it away from him, for an investment in knowledge pays the best interest." -- Joseph E. O'Donnell
|
|
|
|
|
There must be because it's a dll that has a Main method which is defined as an entry method for the application...
Your suggestion doesn't look appealing to me.. I still hope there is some better workaround.
But thanx anyway.
-- modified at 11:54 Wednesday 1st February, 2006
|
|
|
|
|
Library .DLL's have a DllMain method, not a Main. Did you compile this thing as a Console Application??
Colin's suggestion is the best workaround. Doing the "rename .EXE and modify the project file" thing works, but is a total hack.
If the code in the .EXE is going to be shared, do the right thing and put it where it belongs, in a library .DLL!
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I think it's a kind of a bug in visual studio and not a hack that I should apply.
If I can reference the exe from the commandline, why not to allow me doing the same from visual studio which is only an IDE not more than that...
|
|
|
|
|
It's no bug. It's by design. It's trying to force you to follow correct methods and techniques.
Library code and shared objects belong in LIBRARIES, not .EXEs. If you have an object that is shared between modules, it goes in a library. Why is this so hard to understand?
Go ahead and do the "rename .EXE" thing. It just makes you application harder to maintain, a bitch to reuse code, and more difficult to exapand upon.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I think you can really argue whether this is a bug or not.
One application I would have found the possiblity to reference a .NET exe quite convenient was when I tried to make a working application controllable via remoting.
I wanted a quick way to tell my "remote control application" which members my application has, so this was the direct way.
Meanwhile I've dropped the whole idea, but nevertheless I think this to be a perfectly valid example for wanting to reference an exe from a different project.
Any other, better ideas are welcome, though.
Regards,
mav
|
|
|
|
|
You can't set a reference to an .EXE, only .DLL's and other libraries. An .EXE is NOT a library. Well, unless it's an old ActiveX server anyway...
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
It's perfectly possible using the command line compiler, only Visual Studio doesn't allow it. Workaround: rename the file to .dll, add it as reference, rename it back, modify the project file in Notepad.
|
|
|
|
|
|
I was wondering how to find the source code line / filename (__LINE__/__FILE__ equivalent) when using the Compact Framework, since the System.Diagnostics.StackTrace class is not supported? Goal is to support logging of location of errors in release as well as debug. Has anyone found a technique using Trace, perhaps?
|
|
|
|
|
|
I see the .NET Framework have GraphicsPath class to do this but in .NET Compact Framework don't have it. How can i hit the lines? Thanks
Nothing
-- modified at 20:07 Thursday 2nd February, 2006
|
|
|
|
|
hello, this is my first 2 weeks in programming language, iam taking visual C++ and Visual C# and i need a help in C#
if i have a company and inside it i have 3 departments, each department has a symbol, like : A-Adminstration.etc..
i wanna define a char variable like this :
char depar = ( and here i wanna write that 'A' means Adminstrations and 'I' means Information), so when the user enters a symbol, appeares the full name of the department.
so how can i define in ?
-- modified at 11:06 Wednesday 1st February, 2006
|
|
|
|
|
http://www.parashift.com/c++-faq-lite/how-to-post.html#faq-5.2
|
|
|
|
|
First, make an enumeration as follows:
enum Positions
{
Administration = 0;
Management = 1;
Junior = 2;
}
You can then use this to store the current value ie
Positions myPositions = Positions.Administration;
when the function is called you want to check the input (A, M, or J) and then statically handle it, so
if (a) myPositions = Positions.Adminstration
etc
Hope this helps
James
|
|
|
|
|
thanx james, i learned how to do it using switch structure.
|
|
|
|
|
Write a simple FTP (File Transfer Protocol) server and client using the TCP socket libraries on
Unix. This simple FTP application only implements the command “GET” to retrieve a file and
the command “LIST” to request a list of all the files the server offers. The example client and
server codes studied in class show how to use command line parameters and the use of the
socket libraries for a simple stateful server that returns a message to the client that tells the
number of times it has been accessed. The specifications for your client and server are as
follows:
===========================================
Client specification:
Your client should accept as parameters from the command line the name of the host on which
the server runs and the corresponding port number. Both arguments are optional. If no host
name is specified, the client uses "localhost"; if no protocol port is specified, the client uses a
default one given by PROTOPORT.
The client should do the following:
· Prompt the user to enter one of the following two commands:
o GET filename to retrieve the given file
o LIST to get a list of all files the server offers
· Connect to the server and request service by sending the user’s request.
· The client should then simply display the information sent back by the server on the screen.
· The requested file should be written into a file of the same name. If the file already exists, prompt the user to enter a new name.
· Close connection with server when done.
-----------------------------------------------------------------------------------
Server specification:
The server takes a single commandline argument that specifies the port number the server is
using, i.e. server 5555 . If no protocol port is specified, the client uses a default one given by
PROTOPORT. Have the server export a set of files from the computer on which it runs (i.e.
make them availabla for download). The server should:
· Read the request message from the client.
· Process the request (either GET or LIST):
o If the request is GET filename, then retrieve the file and send it to the
client.
o If the request is LIST, then get the list of all files available for download.
· On errors, send an error message back to the client such as:
o Not a command or command not implemented
o File does not exist
o Incorrect command format
Satyaranjan Sahu
|
|
|
|