|
hi friends...
In my form contain one richtextbox and one button.. in richtextbox i want to show the contents page by page or some fixed length from rtf file while clicking the button...How can i do this...
|
|
|
|
|
This question is asked one or more times a week. There is an article here on code project that covers working with RichTextBox, go find it.
led mike
|
|
|
|
|
i am tried but i can't found correct document...You have any link please send me..
|
|
|
|
|
Hi all,
Could someone please explain to me why the following code doesnt work?
<code>
Rectangle r = new Rectangle(0, 0, 100, 100);
Pen p = Pens.Black;
private void Form1_Load(object sender, EventArgs e)
{
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.UserPaint,true);
//a.AddLine(new Point(10, 10), new Point(100, 10));
}
protected override void OnMouseMove(MouseEventArgs e)
{
//Invalidate old location
Invalidate(r);
r.Location = e.Location;
//Invalidate new location
Invalidate(r);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
//Clear clipping rect
e.Graphics.FillRectangle(Brushes.White, r);
//Draw invalidated region
e.Graphics.DrawRectangle(p, r); //Method will draw the right and bottom side out of clipping rect
}</code>
When i run it, the rectangles bottom and right hand side are drawn outside the clipping rectangle. I thought that if something was drawn outside the clipping rectangle, it would be discarded. However this doesnt seem to be the case here.
when i move the mouse, I move the rectangles location also. Before i change the location of the rect, i invalidate it, and then invalidate again once change has been made.
In the drawing routine i wipe the clipping rect with background colour, but for some reason artifacts ouside the clipping area remain.
The end result of the mouse move is an artifact trail, similar to a mouse trail and exactly like what happens, when you win at ms solitare.
It would appear that im not invalidating the right area, but i dont understand why!
I have done a fair bit of graphics programming before, and have never experienced any problem like this. If im invalidating the old bounds before changing them for the new bounds, it should be removing the old screen.
If i change the drawing code to make sure that the rectangle is drawn inside the clipping rect, the problem doesnt happen.
But I just cant understand why the problem occurs anyway. Surely invalidate should cause the overlapping line to be removed?
Here is the code that has been modified not to overdraw the clipping region:
<code>
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
//Clear clipping rect
e.Graphics.FillRectangle(Brushes.White, r);
Rectangle r2 = r;
r2.Height -= 1;
r2.Width -= 1;
//Draw invalidated region
e.Graphics.DrawRectangle(p, r2); //Method will draw the right and bottom side out of clipping rect
}</code>
I would be most grateful to anyone that could point me in the right direction, or tell me if im doing something stupid.
Many thanks,
chris.
Thanks for your help!
<div class="ForumMod">modified on Tuesday, March 25, 2008 11:47 AM</div>
|
|
|
|
|
Without running your code, I'm thinking the problem is here:
protected override void OnMouseMove(MouseEventArgs e)
{
Invalidate(r);
r.Location = e.Location;
Invalidate(r);
}
The first call to Invalidate(r) fills the rectangle then draws it. You then move the rectangle and call Invalidate(r) again which fills the relocated rectangle and then draws it - however, there is no code that is repainting over the old rectangle. You need to keep track of the area that was under the original rectangle and invalidate the union of the old rectangle and the new one (you will only need to call invaldiate once in OnMouseMove when you do this). Also, the call to e.Graphics.FillRectangle(Brushes.White, r) in the OnPaint method will need to be adjusted to fill the clip region (can't remember the property name off hand, but should be easy enough to find).
-----
In the land of the blind, the one eyed man is king.
|
|
|
|
|
Thanks very much for replying.
"Also, the call to e.Graphics.FillRectangle(Brushes.White, r) in the OnPaint method will need to be adjusted to fill the clip region (can't remember the property name off hand, but should be easy enough to find)."
Yeah i realised i had done that! r instead of e.ClipRectangle property, but it doesnt actually make any difference any way.
"You need to keep track of the area that was under the original rectangle and invalidate the union of the old rectangle and the new one.."
Thats what the first invalidate does! When you call invalidate, it wont invalidate immediately. If you were to call refresh() then it would go straight to the paint code, but this way it just carries on executing the next instruction.
I then set the new location and invalidate this as well. this way both the old and new rects are included in the clipping rect, which is filled in the Paint routine (with the corrected code).
---------------------------
Chris.
|
|
|
|
|
Herbertmunch wrote: Thats what the first invalidate does! When you call invalidate, it wont invalidate immediately. If you were to call refresh() then it would go straight to the paint code, but this way it just carries on executing the next instruction.
Yep, you're right - it's been a while since I've done much with GDI apparently, and I forgot that. However, Refresh is a bit more heavy handed - it will invalidate everything then force a redraw - if you only want to force the redraw the invalidated regions, use the Update method. Not that this matters to the issue at hand ...
Anyway, I loaded this up in a test project just to see what was going on - I should have done this right away but was too lazy Anyway, it looks like what you're seeing is from the draw rectangle actually drawing one pixel past the edge of the rectangle (you can see this easier if you make the rectangle width to be 1, you'll see a two pixel wide line drawn). What you'll want to do is just to invalidate an area slightly larger than your rectangle - so your both of your invalidates should so something like: Invalidate(Rectangle.Inflate(r, 2, 2)) . Then, assuming your paint has been updated to fill the clip region, all is working correctly.
The reason you need to invalidate an area larger than the rectangle on the second invalidate as well as the first is becauase of the same issue - the pen draws one pixel to the right and one down from the actual rectangle, causing the rectangle to be clipped if moving to the right or down.
-----
In the land of the blind, the one eyed man is king.
|
|
|
|
|
thanks
"
What you'll want to do is just to invalidate an area slightly larger than your rectangle.."
I came to the same conclusion, but its just a bit nasty for my liking!
I cant remember ever encountering this problem before, which is strange.
it makes no sense at all why this occurs. Surely nothing should be displayed in an area that hasnt been invalidated. Why is this 1 pixel wide artifact occuring? Is this a bug with GDI+?
---------------------------
Chris.
|
|
|
|
|
DataTable dtDetails = new DataTable();//build datatable...
//add columns...
dtDetails.Columns.Add("Cusip");
dtDetails.Columns.Add("Isin");
dtDetails.Columns.Add("Position");
dtDetails.Columns.Add("Bond Price");
//add rows...
dtDetails.Rows.Add("cusip value");
How do I add rows to the datatable with values in each cell in the appropriate row for the column?
For example; the above code creates a datatable with columns and a row. In the first column of the row it shows "cusip value". I also want to add other texts to other cells for other columns in that row.
How is this done please?
Thanks
|
|
|
|
|
try this :
DataRow Dr = dtDetails.NewRow();
Dr["Position"] = ???
Dr["Isin"] = ???
Dr["Bond Price"] = ???
Dr["Cusip"] = ???
dtDetails.Rows.Add(Dr);
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L
%^]*IRXD#@GKCQ`R\^SF_WcHbORY87??6?N8?BcRAV\Z^&SU~%CSWQ@#2
W_AD`EPABIKRDFVS)EVLQK)JKSQXUFYK[M`UKs*$GwU#(QDXBER@CBN%
Rs0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-i?TV.C\y<p?jxsg-b$f4ia>
--------------------------------------------------------
128 bit encrypted signature, crack if you can
|
|
|
|
|
Thanks
modified on Tuesday, March 25, 2008 12:05 PM
|
|
|
|
|
I have a ListView, and I'd like to only allow a single range to be selected. I need the equivalent of Java's SINGLE_SELECTION_INTERVAL ( http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/ListSelectionModel.html#SINGLE_INTERVAL_SELECTION ). For example:
If a ListView has 5 rows, #1,#2 could be selected, or #3,#4,#5, or just #3, but not #1,#3,#4.
Is there any way of adding this functionality in C# without getting heavily into rewriting the control?
|
|
|
|
|
i dont think so, you have to write code for this purpose
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L
%^]*IRXD#@GKCQ`R\^SF_WcHbORY87??6?N8?BcRAV\Z^&SU~%CSWQ@#2
W_AD`EPABIKRDFVS)EVLQK)JKSQXUFYK[M`UKs*$GwU#(QDXBER@CBN%
Rs0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-i?TV.C\y<p?jxsg-b$f4ia>
--------------------------------------------------------
128 bit encrypted signature, crack if you can
|
|
|
|
|
I have a file. I want found the process/handle by which my file is opened?
Ambarish Jana
|
|
|
|
|
Well, if you want to find out what process is locking a file you can use this little utility http://www.dr-hoiby.com/WhoLockMe/[^]
That's a tool not a programmatic method so if its the latter you're after it won't help.
Regards,
Rob Philpott.
|
|
|
|
|
|
Hi All,
I have to listboxes and a button. when the user clicks the button, the selected items from listbox1 will copied into listbox2:
foreach (object o in listBox1.SelectedItems)<br />
<br />
{<br />
<br />
listBox2.Items.Add(o.ToString());<br />
<br />
}
How can i set a control before copieng items. If the selected item(s) from listbox1 already exist in listbox2, that item(s) will not be copied(to avoid duplicate items)????
Thanx.
|
|
|
|
|
Justim,
foreach (object item in listBox1.SelectedItems)
{
if (!listBox2.Items.Contains(item))
listBox2.Items.Add(item);
}
Regards,
Gareth.
|
|
|
|
|
just a quick note add this to your code and it will work !
Clipboard.SetText(item.ToString());
foreach (object item in listBox1.SelectedItems)
{
if (!listBox1.Items.Contains(item))
listBox1.Items.Add(item);
Clipboard.SetText(item.ToString());
}
|
|
|
|
|
I am facing a problem.
I have an enum which further goes as some string values.
Now I have a check or validation for that particular enum type as if it is null, then
display some error message.
But when I give nothing for the particular parameter, it takes the first value from the enum
which is wrong and I do not get the error message at all.
what should I have to do for the validation for null values or when user does not entered any value?
I do not want enum to set the default value as the first one.
|
|
|
|
|
I declared this:
public enum HowFullIsGlass<br />
{<br />
HalfEmpty,<br />
HalfFull<br />
}
and then tried to execute this statement block
HowFullIsGlass hfig ;<br />
if (hfig == null)<br />
{<br />
Console.WriteLine("Null value");<br />
}
I get this error
Warning 1 The result of the expression is always 'false' since a value of type 'WindowsApplication7.HowFullIsGlass' is never equal to 'null' of type 'WindowsApplication7.HowFullIsGlass?' C:\Users\russell.jones\Documents\Visual Studio 2005\Projects\WindowsApplication7\WindowsApplication7\Form1.cs 26 17 WindowsApplication7
I would be tempted to declare this
public enum HowFullIsGlass<br />
{<br />
Dunno,<br />
HalfEmpty,<br />
HalfFull<br />
}
and declare it as HowFullIsGlass hfig = HowFullIsGlass.Dunno;
then you don't need the null check you can check for Dunno
<br />
<br />
HTH<br />
<br />
Russ
|
|
|
|
|
salon,
Just add a value of "Null" to your enum and pass that.
Regards,
Gareth.
|
|
|
|
|
Enums are value types and therefor can never be null.
If you mean that the user provides a string and you try to parse it to get an enum value then I suggest you use System.String.IsNullOrEmpty and act accordingly.
|
|
|
|
|
|
gareth111 wrote: IsNullOrEmpty is not recommended as it can throw an exception which you wouldn't expect.
I have only ever seen this bug reproduced in the do-nothing example, not in any real code.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|