|
Windows Form controls added using the designer are by default "private".
If you want them to be "public" (using the designer), you need to specicy as such via the "Modifiers" item on a control's "Properties" tab.
|
|
|
|
|
Gerry Schmitz wrote: specicy as such via the "Modifiers" item on a control's "Properties" tab. Did exactly that. Did not work.
|
|
|
|
|
Of course it works.
Assuming you have a "reference" to an "instance" of the form, all "public" fields / properties / controls will be visible in your "other" file.
The controls (eg. your rectangle) are members of your form class; without a reference to the form "object", it "won't work".
|
|
|
|
|
Hi all,
im new to C# (coming from matlab), and so theres a lot to explore for me (the whole OOP thing ). Currently I write a simple program which deserializes a xml file (on a menu click) and shows the xml structure in a treeview.
My Problem:
When clicking on an element of the treeview, i want to show the content of the chosen xml field in a datagrid. This means I have to make the deserialized xml (which is an object) avaialable for the treeView1_AfterSelect. Maybe someone has a hint for me? I already searched for a solutions which fits this problem . Maybe its to obvious ^^?
Here's some code (im very new to OOP so dont laugh ).
...
private void loadObjectsToolStripMenuItem_Click(object sender, EventArgs e)
{
string FilePath = string.Empty;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "xml files (*.xml)|*.xml| All files (*.*)|*.*";
openFileDialog1.InitialDirectory = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Application.ExecutablePath), @"");
if (openFileDialog1.ShowDialog() == DialogResult.OK)
FilePath = openFileDialog1.FileName;
xmlDataThings xmlData= (xmlDataThings )xmlReadWrite.DeSerializeFromXML(FilePath, typeof(xmlDataThings ));
TreeNode tNode = new TreeNode(openFileDialog1.SafeFileName);
if (treeViewObjects.Nodes.ContainsKey(openFileDialog1.SafeFileName))
return;
tNode.Name = openFileDialog1.SafeFileName;
treeViewObjects.Nodes.Add(tNode);
tNode = treeViewObjects.Nodes[treeViewObjects.Nodes.Count-1];
AddNode(xmlData, tNode);
treeViewObjects.ExpandAll();
}
private void treeViewObjects_AfterSelect(object sender, TreeViewEventArgs e)
{
if (treeViewObjects.SelectedNode.Level == 2)
{
}
...
}
Would be very nice if someone has a hint for me.
|
|
|
|
|
Simplest thing would be to make xmlData a member of the class instead of a local variable. Then you could refer to it from both methods.
|
|
|
|
|
As I said, it was obvious ^^ thank you for the hint. Just needed a static object (that was the point) where I have to "set" the object at first deserialize and afterwards i can "get" it from there...
public class xmlReadWrite
{
static private object _xmlData;
public object getXmlData()
{
return _xmlData;
}
public void setXmlData(object xmlData)
{
_xmlData= xmlData;
}
}
|
|
|
|
|
You should not use the static keyword here. "private object _xmlData = null;" is correct.
|
|
|
|
|
this doesnt work (I've tried). Because the "static" is needed so the class doesnt loose the object after the first call (as far as i understand )
|
|
|
|
|
It will only lose the object when the containing class is destroyed. From your original post, it seemed like everything is in the same class.
|
|
|
|
|
I'm try to using native dll (with original .h), but it does not work.
Thanks!
|
|
|
|
|
With that non-description of the problem, this is the only reply you're likely to receive.
Without knowing anything about the .DLL you're using, the function you're trying to call, the code your using to import the function with and the code you're using to call it, it's IMPOSSIBLE for anyone to give you any kind of useful information.
|
|
|
|
|
I am getting packages of 256 samples of data per second.
i.e., one large pack; contents: 256 samples.
I want to display that as smoothly as possible, i.e., with as little visible screen jitter, but not lose any data.
As soon as I finish this pack, I will have another one waiting on me.
My arithmetic says that if I schedule one sample every millisecond, I will be exactly ten seconds behind after seven minutes of data.
In this app, no way; I forbid.
If I don't have any time delay between the data points, I get much jitter. Again, no way; I forbid.
My first thought is...
-- Every 42nd event gets 2 dots in a row with no delay
i.e., I put 2 dots on the screen, one after the other, on these iterations
-- 42nd
-- 84th
-- 126th
-- 168th
-- 210th
-- 252nd
That would get me all 256 points on the display once every second. There would be 6 "jerky" points per second; and I don't even know if they will be noticeable in the first place.
Anyone, please correct my arithmetic, but I believe that that gives me a "jumping rate" of slightly better than 40 Hz.
The two big factors are
-1- All data; never miss a dot
-2- Smooth appearance for the human eye
I welcome superior suggestions.
|
|
|
|
|
For me personally, I think anything < 250ms is not perceptibable to most people. I am pretty sensitive to delays, and I think I'd notice a delay as you approach 500ms. Most people wouldn't even notice that.
You aren't going to get real time display on a Windows box.
I don't understand what you mean by jitter? Do you mean flicker on screen as you are drawing the data points? "Jitter" to me is an electronics term as it relates to the signal. If you do in fact mean FLICKER, that can be resolved by erasing / drawing to an offscreen DC and then BitBlt'ing the final image to onscreen.
A better bet would be to dump Winforms and go WPF as that is double buffered for you and the renderings are hardware accelerated by your video card where as Winforms / GDI is not.
Personally though, I think going the offscreen DC / bitblt will solve your flicker.
|
|
|
|
|
SledgeHammer01 wrote: drawing to an offscreen DC and then BitBlt'ing the final image to onscreen. Excellent thinking and reasoning; in fact, highly parallel, if not identical, to my own. I searched a lot last week for phrases like "C#, BitBLT" and asked questions in forums (Maybe here also) about it. Final result: zero knowledge.
The closest that I encountered was this...
Graphics.DrawImage Method
...which I found Here[^]
I welcome your explanation of how to do BitBLT in C#. For whatever reasons, I totally missed the boat on that one.
|
|
|
|
|
See here, there may be a really simple shortcut available to you (auto double buffer)... you'll have to try it out to see if it resolves your issue... Otherwise, the info on how to manual double buffer on Winforms is here as well:
http://msdn.microsoft.com/en-us/library/ms229622.aspx[^]
|
|
|
|
|
I am creating an app to interrogate a web-site. In combing through the examples on MSDN and elsewhere to learn about socket programming, I noticed that almost all the examples have static classes and methods. What is the reason for this?
In my case, I am indifferent. For a variety of reason out of my control, this will be a single threaded query/reply app.
Is there some performance issue involved? It would be easier to not have to declare/manage variable representing the classes. Is that why it is done?
|
|
|
|
|
Most handy for classes that contain only library routines. Otherwis, a regular class is probably more appropriate even if you intend to never have more than one instance.
|
|
|
|
|
Generally you only use static classes for stateless methods. There are also singletons, and it is generally considered good practice to access singletons through and static instance property which will instantiate the singlton class if it has not already in instantiated when the instance property is first called.
|
|
|
|
|
mjackson11 wrote: Is there some performance issue involved?
Yes. Removes the need to lookup the object-instance.
|
|
|
|
|
Sure, but that's no reason to use a static class when a regular class is more apropriate.
|
|
|
|
|
And vice versa; a static class would be appropriate. What's the use of a singleton-pattern if all it does is replace a static class, without adding any additional value?
|
|
|
|
|
I don't recommend the Singleton-pattern either.
<anecdote>
One of the things I had to work around in the last year is that the System.Console class is static -- I needed a non-static class I could pass around so I had to wrap System.Console in another class, it was dreadful. The problem is worse because .net doesn't have Interfaces for TextReader and TextWriter. I had to create those as well.
Making a class static or Singleton simply because you don't expect to ever need more than one is not a good idea; don't limit your options unnecessarily.
|
|
|
|
|
Why pass a static class around in the first place? There's no need to pass a reference if there's only one class.
PIEBALDconsult wrote: Making a class static or Singleton simply because you don't expect to ever need more than one is not a good idea; don't limit your options unnecessarily.
I'd expect an app to have a single stdout. Did you have multiple?
|
|
|
|
|
Eddy Vluggen wrote: if there's only one class
But there might not be!
Eddy Vluggen wrote: a single stdout
That's not the point. I want to pass a reference to something that implements ITextWriter, for example, I don't care that it just happens to be System.Console in this particular case. But .net doesn't allow me to do that easily for multiple reasons.
|
|
|
|
|
Hello
i have some theory knowledge in C#, but no practical experience.
i want to improve my Skills, and start working on some project.
I've been looking for internship or trainee ship
but no luck.
so after reading and digging, i found out that one of the best ways to improve Programming knowledge is by joining an open source project.
I've been looking for a project for the last 2 days, but it's really frustrating.
all the projects seems to be SO advanced and so Complicated for my knowledge
i really need advice on that!
thank you so much in advance.
|
|
|
|