|
Yup - it works for me. Try to use System.Windows.Controls.RichTextBox as the source rather than the WinForms version, as this is a WPF feature.
|
|
|
|
|
Thanks for the tip. Alas, in this case, it opened one of those daisy-chains (or certainly seemed to), where I added more references, and each change required more changes.
I created a WPF project, directly, hoping for a roadmap to what's maissing - and became a bit cross-eyed at how differently the 'code' was presented. Clearly, I've a hefty amount of study to do.
My hope was to simply add another namespace (&etc), and access the WPF objects.
Nonetheless, you set me off in the direction so that I don't keep spinning my wheels on this.
|
|
|
|
|
Friends,
Few months back, i've noticed a feature in Visual Studio with which we can generate HTML documentation of our classes. I don't know that which version of Visual Studio i've seen this feature or whether it is for C# or C++. Please tell me that from which menu item i can invoke this option ?
Imtiaz
|
|
|
|
|
Imtiaz Murtaza wrote: feature in Visual Studio with which we can generate HTML documentation
Are you kidding[^]?
led mike
|
|
|
|
|
You want to look into Sandcastle and the /doc operation in building your app.
|
|
|
|
|
Hello I have a datatable fill by a query
That datatable is the datasource for a combo
I try to programmaticaly change the Value on an Item in a row of that datatable
dtt.Rows[i].ItemArray[1] = addrID;
I got no error but the value of
dtt.Rows[i].ItemArray[1]
Remain unchanged
addrID is an int
What is wrong ?
|
|
|
|
|
baranils wrote: I try to programmaticaly change the Value on an Item in a row of that datatable
Are you working from a book or tutorial or article that told you to do it that way?
led mike
|
|
|
|
|
Why such question ?
No I'm working from my own, learning quickly and trying to find as much information as I can everywhere, in my mind too.
But with some try and error of course
So...
do you have a solution ?
|
|
|
|
|
baranils wrote: do you have a solution ?
Yes, use a tutorial or article or book. There are many articles here on CodeProject.
baranils wrote: Why such question ?
Good question, how about, because I know what I am doing and you don't? You like that reason?
led mike
|
|
|
|
|
Try
dtt.Rows[i][1] = addrID;
You can also use the ["TheNameOfTheColumn"] instead of [1], like so:
dtt.Rows[i]["AddressID"] = addrID;
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
Thank You John
Yes I got it and you are right : using the field name avoid confusion or even mismatch when the user reorder column in a datagridview for example
However indexing using an ordinal can be faster and usefull sometime
|
|
|
|
|
baranils wrote: However indexing using an ordinal can be faster and usefull sometime
It may be a little faster, but not nearly as maintainable for the guy that follows you into the code.
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
Right !!
|
|
|
|
|
Is there any other way of updating forms in a thread safe way apart from the delegate/InvokeRequired trick?
I'm working on an app (RSS Reader) which has a separate thread for checking if new items appeared and updating context menus accordingly, can I acquire some sort of lock to a control or do I have to create UpdateContextMenuItem(ToolStripMenuItem menuitem, ToolStripItem subitem)-esque methods for each and every action that I may need to perform? I'm new to C#/.NET, and despite initial bias I was quite impressed how clean and well-designed it is, until now.
TIA,
Greg
|
|
|
|
|
Jergosh wrote: I'm new to C#/.NET
What about Object Oriented Programming and/or Design Patterns, are you new to those as well? What is your background?
Jergosh wrote: apart from the delegate/InvokeRequired trick?
Why is that a trick? It's an implementation of inter-thread communications, do you know of some way to communicate between threads that doesn't involve communicating between threads?
led mike
|
|
|
|
|
led mike wrote:
What about Object Oriented Programming and/or Design Patterns, are you new to those as well? What is your background?
I have experience with C, C++ and Python as well as have completed misc university courses (algorithms and data structures etc) but I don't see how that's relevant.
led mike wrote: Why is that a trick? It's an implementation of inter-thread communications, do you know of some way to communicate between threads that doesn't involve communicating between threads?
I'd say it's less standard than just acquiring lock, doing whatever we like with the object and then releasing it. Less convenient as well if I want, say, clear a menu and populate it with dynamic content as I have to write several helper methods. Apart from that, replacing
menuItem.DropDownItems.Clear();
with self-made
ClearDropDownMenu(menuItem) isn't particularly object-oriented (or at least doesn't look as if it was). Could we please get back to my initial question?
modified on Thursday, March 6, 2008 3:15 PM
|
|
|
|
|
Jergosh wrote: I'd say it's less standard than just acquiring lock
How does acquiring a lock switch your codes execution context to another thread?
Jergosh wrote: Could we please get back to my initial question?
Your initial question appears to be based upon a misunderstanding of some of the things that are involved in the answer to your question. The direction of my posts was based on the idea that you might consider it of value to gain an improved understanding of these rather than just be given a "do this" solution. If that's not the case then so be it.
led mike
|
|
|
|
|
Hi,
accessing a Control must be done by the thread that created the Control, normally the main
thread a.k.a. GUI thread. So other threads must SOMEHOW pass the GUI access actions to the
main thread. There are basically two ways to do that:
1. the Control.InvokeRequired/Invoke pattern
2. otherwise passing sufficient data to the GUI thread and have it access the Controls
(e.g. prepare a collection with new data, and have it processed by a Windows.Forms.Timer,
which always ticks on GUI thread!
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
Luc Pattyn wrote: There are basically two ways to do that:
1. the Control.InvokeRequired/Invoke pattern
2. otherwise passing sufficient data to the GUI thread and have it access the Controls
(e.g. prepare a collection with new data, and have it processed by a Windows.Forms.Timer,
which always ticks on GUI thread!
Most helpful, many thanks
|
|
|
|
|
You're welcome.
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
hey guys, im writing my own auto update component for my apps, it downloads a compressed archive (.gz) and i was wondering if anyone could recommend a good gzip library i can use to deflate the file and then copy the files.
|
|
|
|
|
How about the GZIPStream[^] class in System.IO.Compression namespace
only two letters away from being an asset
|
|
|
|
|
I'm having a problem using an unmanaged library from C#. The C++ sample app uses the following
<br />
typedef struct {<br />
char *filename;
char **paddr;
long *pbytes;
long *pbuflen;
} MEMIOSTRUCT;<br />
<br />
extern "C" { __declspec (dllimport) int WINAPI OUTRun(LPSTR, MEMIOSTRUCT **); }<br />
Okay now my C# app uses the following
<br />
<br />
[StructLayout(LayoutKind.Sequential)]<br />
public struct MEMIOSTRUCT<br />
{<br />
public string filename;<br />
<br />
public string data;<br />
<br />
public int dataSize;<br />
<br />
public int bufferSize;<br />
}<br />
<br />
[DllImport(@"owrm32c.dll", CallingConvention = CallingConvention.Winapi)]<br />
[return: MarshalAs(UnmanagedType.I4)]<br />
private static extern int OUTRun ( [MarshalAs(UnmanagedType.LPStr)] string s , [Out] MEMIOSTRUCT [ ] m );<br />
...<br />
MEMIOSTRUCT [ ] memioAlias = MemoryAliases.ToArray( );
int exitCode = OUTRun(command , memioAlias);<br />
</memiostruct>
When I run this I get a AccessViolationException. How am I implementing this wrong? BTW, I'm not a C++ guy so don't flame me if this is simple.
Thanks,
Dan
|
|
|
|
|
Hi,
I developed an application that opens an excel doc, and reads/displays its contents to a datagrid. How do I determine its start and end rows? I have tried some code but it does not give me the result I need. e.g. I tried:
//get start and end rows
Object[] startRow = {worksheet.get_Range("A4", "O4")};
Object[] endRow = {worksheet.Rows.get_End(XlDirection.xlDown)};
which did not work for me.
See below:
// loop through all rows of the spreadsheet and place each row in the datagrid.
for (int i = 4; i <= 50; i++)
{
Microsoft.Office.Interop.Excel.Range range = worksheet.get_Range("A" + i.ToString(), "Z" + i.ToString());
System.Array myvalues = (System.Array)range.Cells.Value2;
string[] strArray = ConvertToStringArray(myvalues);
DataGridViewRow row = new DataGridViewRow();
Object[] vals = strArray;
row.CreateCells(dgOutput, vals);
dgOutput.Rows.Add(row);
}
This displays the 1st 50 rows. I do not want to display 50 rows, I want to display all the rows in the spreadsheet. I need a variable that will replace the 50 (in the for loop) and represent the end-of-file.
Please help.
Mvelo Walaza
Developer
Telkom SA
|
|
|
|
|
int lastUsedRow = worksheet.Cells.SpecialCells(XlCellType.xlCellTypeLastCell, Type.Missing).Row;
|
|
|
|