|
Override the OnPaint method of a form and use the Graphics class passed in the parameters of the function to draw lines, e.g.
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawLine(0, 0, this.Width, this.Height);
e.Graphics.DrawLine(0, this.Height, this.Width, 0);
}
|
|
|
|
|
Hii all
I have a VC++ DLL that contains a function with the following signature:
int myFunction (const char* pXMLFile, int PageCode, int eNumberConversion);
and i want to use it in c#, after searching the internet i found that i have to use the DllImport and do some data marshaling in order to be able to call this function.
my question is: what is the C# type used for the const char * ??
Thanks
MiNa
|
|
|
|
|
string I would think, it depends more on the attributes applied to the parameter than the type. You can also use the StringBuffer .
|
|
|
|
|
Should a member variable be passed to a private method in the same class as a method argument, or should the method simply call the member variable?
For years, I have passed member variables to private methods in the same class as method arguments. For example, if Public method Foo() calls private method Bar(), and if Bar() uses member variable m_MyVariable, I declare the private method with the signature:
private void Bar(SomeType myVariable)<br />
{<br />
...<br />
}
Foo() calls Bar() as:
this.Bar(m_MyVariable);
In other words, even though Bar() could call m_MyVariable directly, I don't do it. Instead, I create a local variable within Bar() to hold the value.
I've done this to keep my private methods as self-contained as possible, and to make it obvious from the method signature just what the method needs in order to do its job. Arguably, this approach makes it easier to follow the flow of control within the program.
But now I'm not so sure it's such a good idea. I often end up with long method signatures with a half-dozen or more arguments, and I find that I'm passing the same member variables (typically helper objects) to every private method in a class.
So, what do you think? Am I better off passing member variables to private methods as arguments, or should I simply let the methods call member variables directly? Thanks for your input.
David Veeneman
Foresight Systems
David Veeneman
www.veeneman.com
|
|
|
|
|
I'd say you're approach is more "procedural programming" oriented than OO oriented. While your approach has its advantages, I generally prefer to let the private methods be intelligent. My public methods usually do only parameter validation and simple state manipulation and let the private methods handle the heavy work. Private methods "hide" how they accomplish the job - which implies that private methods directly deal with member variables.
Have you tried running one of those code analysis tools (FxCop, VS 2005's Code Analyzer)? I distinctly remember one of them suggesting that methods defined in your style be made static. And it makes sense too, they don't need to interact with the state of the object.
|
|
|
|
|
Thanks--that's very helpful!
David Veeneman
www.veeneman.com
|
|
|
|
|
The whole point of member variables, is that they are there. I would pass them only if I felt I may want to pass something else to the same method at some point. I would never pass them if the code then always relied on the right variable being passed in. The idea is to write self documenting code that others can work on easily.
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
I raised this issue on comp.object. You can read my original post here[^]. Be sure to read the replies.
At one point, I was using your approach and to an extra step in making my private methods static. My main reasoning is that I didn't like my private methods changing the state of the object. For example, say that a public method needs to call two private methods, one right after the other, in order to perform a task. Say that the first private method alters the state of the object. Also, say that it's possible for the second private method to fail for some reason. If the first method alters state and the second method fails, you will need to revert the state to its earlier, pre-error condition. My approach at the time was to call my private methods, passing them whatever info they needed, store the results of the methods in local variable (to the public method), and finally update the object's state once the private methods have completed.
However, I have fallen out of this practise, if for no other reason than laziness. Most of my private methods can alter state and such. I'm a little uncertain, still, if this is good design.
|
|
|
|
|
Thanks Christian--very helpful!
David Veeneman
www.veeneman.com
|
|
|
|
|
Thanks for your feedback--it's very helpful.
I've gotten sold on changing to the way you are doing it now. What I found persuasive was the argument that private methods are first-class members of an object. The are only private in order to hide their workings from the outside world, not because they are somehow inferior. As such, they should have the same access to an object's state as any other method.
That makes a lot of sense to me. I've just refactored a project I'm working on to remove member-variable arguments, and I think it does simplify the code and make it easier to read.
David Veeneman
www.veeneman.com
|
|
|
|
|
I had write this code
for (int i = 0; i < totalEquipment; i++)
try
{
for (int j = 0; j < sEquip[index].index; j++)
{
try
{
...
bar[j].Size = new Size(length,20);
bar[j].BackColor = System.Drawing.Color.Blue;
bar[j].Location = new Point(xPosition,yPosition);
this.Controls.Add(bar[j]);
...
}
catch (Exception ex)
{
throw new Exception(ex.Message + " " + ex.StackTrace);
}
finally
{
xPosition += length;
}
}
}
catch (Exception ex)
{
throw new Exception(ex.Message + " " + ex.StackTrace);
}
finally
{
yPosition -= range;
}
}
}
The problem is this part which it keep add panel to window form without stoping like non stop looping. How can i stop this error?
try
{
...
bar[j].Size = new Size(length,20);
bar[j].BackColor = System.Drawing.Color.Blue;
bar[j].Location = new Point(xPosition,yPosition);
this.Controls.Add(bar[j]);
...
}
|
|
|
|
|
shamsteady wrote: for (int i = 0; i < totalEquipment; i++)
try
{
for (int j = 0; j < sEquip[index].index; j++)
This may be seem stupid but what's the value of totalEquipment multiplied by sEquip[index].index ?
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Hi,
I need to make a little c# program which copies a text into the clipboard and that pastes this data into the active window. I am looking to automatically paste into active window, from my code.
I copy the data like this
Clipboard.SetText("mystring");
but i don't know how to paste this data into the active window (notepad, word for example). I guess I have to use the GetForegroundWindow API function, but i am a beginner and I don't know how I could do this
thanks for your help
|
|
|
|
|
Hello everyone,
I am working on a DVD Windows Application and it is almost done and fully functional. The project is done in C# using DirectShow programing.
I would like to add a control panel to the Application which is appeared only for a short period of time (5 second) and get disappears after not using the mouse or keyboard. Just like the one you have when you have your DVD Playback software in Fullscreen option.
can someone be kind enough to point me to the right direction and tell me where I need to start if I wish to add such a control panel?
Thank you very much and have a great day.
Khoramdin
|
|
|
|
|
You just put a timer inside the form, so it closes itself after 5 seconds - the timer resets itself on every keyboard or mouse event. Is that the bit you needed help with ?
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Hello Chritian,
Thank you for your respond. That sounds exactly whasiblet I need. Would it possible for you to give some info and tips how to get this done?
Your help is greatly appricated.
Khoramdin
|
|
|
|
|
Hi all
i have typed Data set with it's data Adaptors
i need to make public sub and send to it the data adaptor as parameter
and for each screen i call this sub i will put my current data adaptor in the parameter place
how can i do this
thx
|
|
|
|
|
In the VB forum ^
Please don't spam.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Im trying to add panel in window form by using this method.
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Panel mypanel;
private void InitializeComponent()
{
...
this.mypanel = new System.Windows.Forms.Panel();
...
}
...
...
this.Controls.Add(this.mypanel);
Is there other way to display panel besides using "this.Controls.Add(this.mypanel);" method?
|
|
|
|
|
Yes, you can use:
this.mypanel.Parent = this;
|
|
|
|
|
|
Hi
I want to filter input data in DatagridView control. For example preventing entering numeric values in 'Name column' or preventing entering alphabetic values in 'Pricre column'. I mean i want to lock keyboard's number keys when user focuses on cell that should enter "Customer Name" avoiding entering wrong data.
Tanx
|
|
|
|
|
I think that using generic columns you can't control it. You must create your own custom column (inherited from TextboxColumn) and implement your validation
|
|
|
|
|
i have a toolstrip in my form and my form is scrollable but when i scroll the page toolstrip's location changed i want always toolstrip at the top of page
how can i do it ?
Thanks
MHF
|
|
|
|
|
Set its dock property to TOP
|
|
|
|