|
well, as far as I know I once read of someone who said you have to clone the existing menu, do a lot of castings and dig deep into the microsoft model to do this.
I once wanted to do this myself but after 14 days of doing this and that I gave up because I had no real result, which was worth working on it any further.
So from my point of view I would say do insert a button, that's much more easy to do. And if you finally did it this way and everything works and there is still some amount of time you could still try do some research or testings on you aim.
But don't mess up to long wasting time because you do want your solution to be 100% the way you planned it. Beliefe me: You do have to change opinions quit often while designing big proggies!
|
|
|
|
|
Hi there, my question is:
How do I automatically resize the Form when the screen resolution changes between design-time and runtime?
My application is developed with 1024 * 768 but i am not sure that all users do use this resolution. and i don`t want to change the users resolution programtically by using user32.dll. I want my application to adjust to users resolution.
Please help me out
|
|
|
|
|
#1, no matter method you use to solve the resizing, you'll probably want to trap your Form's "Resize" event (in the designer, select your form, in the properties window, click the "Events" icon, find Resize, double click it). Trapping the Form's resize will make it easier to resize all the child controls. If you have subcontrols that don't respond well to a parent resize, develop a public method within them that you can call to initiate the same type of resizing once your main form is resized.
#2, I don't know the exact way to get the "true" screen resolution in WinForms (just been using them seriously for about a week now). Screen.PrimaryScreen.WorkingArea (a System.Drawing.Rectangle property) will get you very close -- it returns the largest client area. On my 1280x1024 resolution screen, it returns 1280x994. As a note right here, you probably shouldn't hardcode in "30" or whatever number you find to be the difference between the true resolution and what you see with .WorkingArea. For instance, if I docked my taskbar to the right side of the screen, it would be my X component vs Y component that would shrink. So .WorkingArea may be the best bet anyhow if you truly want to make your UI look standard across all setups.
As far as solutions, there's a couple things you can do:
- Make calculations based on the design time form placement and size vs. the resolution returned by .WorkingArea (basically, come up with fractions/scaling factors/offsets that you can use to dynamically position your objects).
- Do the same as above, but assume a constant, virtual screen size (I've used 5000x5000 before in games). Calculate scales & offsets, probably only need to do this once in your app at the beginning and store the results in sub-properties of the controls if possible, or in some form of List. Then when resize time comes, apply the stored fractional value and multiple/divide it with the virtual screen size : actual screen size (.WorkingArea or other) to come up with the form's true placement.
The second may sound like a lot of work, but sometimes it's nice to initially work with constant units, then just have your program rescale for you when the Resize occurs.
I'm pasting some sample code of the first method I recommended. Note that I use relative offsets in some cases, which is perfectly fine:
lblLoans.Location = new Point(lblLoans.Location.X,(int)((double)Size.Height * 0.5));
lvwShares.Size = new Size(Size.Width - 16, lblLoans.Location.Y - 60);
lvwLoans.Location = new Point(lvwLoans.Location.X,lblLoans.Location.Y + 25);
lvwLoans.Size = new Size(lvwShares.Size.Width,lvwShares.Size.Height);
Size.Width / Size.Height refer to the size of the Form (since this is in my Form's resize method).
Lastly, and I don't have a solution for this, you may want to consider what will happen when the user changes resolution while using your application -- though MANY programs do not properly handle this, you will have accounted for many things a user could do which might cause your UI to break. Ideally, you'd be able to detect the screen resolution change (somehow?) and reset a member variable to reflect the new values, then use these for future calculations. In the Win32 API, there was a message you could trap which would let you know the screen resolution was changed, but I'm not quite sure how to detect that in WinForms....
Good Luck!!
|
|
|
|
|
Regarding your second answer, if you read the .NET Framework SDK documentation, WorkingArea is the desktop area minus any app bars (like the task bar), docked windows, etc.. Use Screen.Bounds to get the entire client area.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
See my indirect reply to part of your question at http://www.codeproject.com/script/comments/forums.asp?msg=889799&forumid=1649#xx889799xx
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Please i want to creat a button when i click on it open other form.if i added a new form to the project how can i open it by clicking a button in anther form???!!!.
|
|
|
|
|
hi,
No one is perfect in any language.Language is used for convince your idea or things to others. But here i don't know what you are trying to convince.
so please write your queary which help others to post answers.
Don't feel bad i can help you out.
**************************
S r e e j i t h N a i r
**************************
|
|
|
|
|
Suppose Form1 contains button1 and when user clicks button1, you want to display Form2. Below code does the same.
private void button1_Click(object sender, System.EventArgs e)
{
using (Form2 f = new Form2())
{
f.ShowDialog();
}
}
|
|
|
|
|
Firstly create an instance of your new form
Form2 myForm = new Form2();
Then show the form
myForm.Show();
If this was not what you were trying to do then re-post your problem.
Kev Pearman MCP
|
|
|
|
|
Hi,
Is it possible for a base class to determine with reflection the type of the derived class that called the base constructor?
Something like the following code:
--------------------------
class DerivedClass : BaseClass
{
public DerivedClass() : base() {} // 1.
}
class BaseClass
{
public BaseClass() // 2.
{
Console.WriteLine("I was constructed by the following derived class: "+ ... );
}
}
---------------------------
Thanks,
Pete
|
|
|
|
|
Yes it can..
using System;<br />
namespace ConsoleApplication1<br />
{<br />
class Class1<br />
{<br />
[STAThread]<br />
static void Main(string[] args)<br />
{<br />
c1 c = new c2();<br />
Console.WriteLine("I was constructed by the following derived class: "<br />
+ c.GetType());<br />
c = new c3();<br />
Console.WriteLine("I was constructed by the following derived class: "<br />
+ c.GetType());<br />
}<br />
}<br />
class c1<br />
{<br />
public c1(){}<br />
}<br />
class c2 : c1<br />
{<br />
public c2(){}<br />
}<br />
class c3 : c1<br />
{<br />
public c3(){}<br />
}<br />
}
|
|
|
|
|
PJules wrote:
Is it possible for a base class to determine with reflection the type of the derived class that called the base constructor?
Ok had to read that a few times. I think I have, quite tricky! I think this will explain what you need:
#region Using directives
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Reflection;
#endregion
namespace ConsoleApplication1
{
class Program
{
protected Program()
{
Console.WriteLine("{0:X8}\t:default", GetHashCode());
foreach (StackFrame sf in new StackTrace().GetFrames())
{
MethodBase mi = sf.GetMethod();
Console.WriteLine("{0}::{1}", mi.DeclaringType, mi);
}
}
protected Program(string overload)
{
Console.WriteLine("{0:X8}\t:overload", GetHashCode());
foreach (StackFrame sf in new StackTrace().GetFrames())
{
MethodBase mi = sf.GetMethod();
Console.WriteLine("{0}::{1}", mi.DeclaringType, mi);
}
}
protected Program(int someother) : this(someother.ToString())
{
Console.WriteLine("{0:X8}\t:overload -> someother", GetHashCode());
foreach (StackFrame sf in new StackTrace().GetFrames())
{
MethodBase mi = sf.GetMethod();
Console.WriteLine("{0}::{1}", mi.DeclaringType, mi);
}
}
static void Main(string[] args)
{
Derived a = new Derived();
Derived b = new Derived("foo");
Derived c = new Derived(100);
Derived d = new Derived(true);
Console.ReadLine();
}
}
class Derived : Program
{
public Derived() : base("dummy") { }
public Derived(string overload) : base(100) { }
public Derived(int crossref) : base() { }
public Derived(bool v) : this() { }
}
}
Output:
03B95145 :overload
ConsoleApplication1.Program::Void .ctor(System.String)
ConsoleApplication1.Derived::Void .ctor()
ConsoleApplication1.Program::Void Main(System.String[])
System.AppDomain::Int32 nExecuteAssembly(System.Reflection.Assembly, System.String[])
System.AppDomain::Int32 ExecuteAssembly(System.String, System.Security.Policy.Evidence, System.String[])
VSHostUtil.HostProc::Void RunUsersAssembly()
System.Threading._Thread::Void ThreadStart_Context(System.Object)
System.Threading.ExecutionContext::Void Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, System.Threading.StackCrawlMark ByRef)
System.Threading._Thread::Void ThreadStart()
00AE0419 :overload
ConsoleApplication1.Program::Void .ctor(System.String)
ConsoleApplication1.Program::Void .ctor(Int32)
ConsoleApplication1.Derived::Void .ctor(System.String)
ConsoleApplication1.Program::Void Main(System.String[])
System.AppDomain::Int32 nExecuteAssembly(System.Reflection.Assembly, System.String[])
System.AppDomain::Int32 ExecuteAssembly(System.String, System.Security.Policy.Evidence, System.String[])
VSHostUtil.HostProc::Void RunUsersAssembly()
System.Threading._Thread::Void ThreadStart_Context(System.Object)
System.Threading.ExecutionContext::Void Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, System.Threading.StackCrawlMark ByRef)
System.Threading._Thread::Void ThreadStart()
00AE0419 :overload -> someother
ConsoleApplication1.Program::Void .ctor(Int32)
ConsoleApplication1.Derived::Void .ctor(System.String)
ConsoleApplication1.Program::Void Main(System.String[])
System.AppDomain::Int32 nExecuteAssembly(System.Reflection.Assembly, System.String[])
System.AppDomain::Int32 ExecuteAssembly(System.String, System.Security.Policy.Evidence, System.String[])
VSHostUtil.HostProc::Void RunUsersAssembly()
System.Threading._Thread::Void ThreadStart_Context(System.Object)
System.Threading.ExecutionContext::Void Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, System.Threading.StackCrawlMark ByRef)
System.Threading._Thread::Void ThreadStart()
03DEA808 :default
ConsoleApplication1.Program::Void .ctor()
ConsoleApplication1.Derived::Void .ctor(Int32)
ConsoleApplication1.Program::Void Main(System.String[])
System.AppDomain::Int32 nExecuteAssembly(System.Reflection.Assembly, System.String[])
System.AppDomain::Int32 ExecuteAssembly(System.String, System.Security.Policy.Evidence, System.String[])
VSHostUtil.HostProc::Void RunUsersAssembly()
System.Threading._Thread::Void ThreadStart_Context(System.Object)
System.Threading.ExecutionContext::Void Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, System.Threading.StackCrawlMark ByRef)
System.Threading._Thread::Void ThreadStart()
02A8E964 :overload
ConsoleApplication1.Program::Void .ctor(System.String)
ConsoleApplication1.Derived::Void .ctor()
ConsoleApplication1.Derived::Void .ctor(Boolean)
ConsoleApplication1.Program::Void Main(System.String[])
System.AppDomain::Int32 nExecuteAssembly(System.Reflection.Assembly, System.String[])
System.AppDomain::Int32 ExecuteAssembly(System.String, System.Security.Policy.Evidence, System.String[])
VSHostUtil.HostProc::Void RunUsersAssembly()
System.Threading._Thread::Void ThreadStart_Context(System.Object)
System.Threading.ExecutionContext::Void Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, System.Threading.StackCrawlMark ByRef)
System.Threading._Thread::Void ThreadStart()
Got it? Good
top secret xacc-ide 0.0.1
|
|
|
|
|
Thank You!
That's a very helpful code snippet
How safe is this stack tracing?
I mean, are there no risks due to asynchronous interceptions by the CLR?
Thanks
Pete
|
|
|
|
|
PJules wrote:
How safe is this stack tracing?
I dont think there is anyhting unsafe about it, just a heavy operation.
top secret xacc-ide 0.0.1
|
|
|
|
|
Hello All,
I've been playing around with DirectSound in the past month or so. As a first project I set out to write an application that does the following:
1. Playback wav files
2. Record wav files
3. Stream audio from the sound card to the speakers.
I was able to do (1) without a problem and (2) after a bit of a struggle.
However, I just don't seem to be able to do (3). It would seem to be trivial, considering I've done (1) and (2).
My scheme is this:
CaptureBuffer -> ByteArray -> MemoryStream -> SecondaryBuffer
I'm running into problems in the ByteArray -> MemoryStream portion and there on.
I realize that this may not be a topic a majority of the users of this forum are interested in and am absolutely willing to continue this discussion privately through email: (nietzschedisciple@gmail.com)
I would really appreciate it if somebody could email me some working code snippets (I don't want to see your entire program, just the parts relevant to my problem).
I think I understand what I'm supposed to do THEORETICALLY. The problem is in translating it to code.
Thanks for reading!
|
|
|
|
|
If you don't get your answer here, try the forums on http://www.gamedev.net, plenty of people there I'm sure have tried this, or would at least have an idea.
|
|
|
|
|
John, thanks for your suggestion. However, I've tried the DirectX forum there. Not too many people interested in DirectSound - more interested in the graphics aspect. I did receive a few suggestions, none too helpful.
I was wondering if any users here dabble with DirectSound...
|
|
|
|
|
Hello,
I want to get some monitor value (cpu usage, memory) of a process by using perfomance counter. The perf.counter require the instance name but currently I dont know how to get the image name of a process exactly!
For example,
if process name is SampleAppTest.exe:
In Win2K3 image name will be SampleAppTest.exe
In Win2K image name will be SampleAppTest.e (15 chars)
if 2 users run SampleAppTest.exe in same computer, the required image name will be SampleAppTest.exe for user 1, SampleAppTest.exe#1 for user 2, ...
(SampleAppTest.e for user 1, SampleAppTest.e#1 in Win2K)
So how to supply correct image name to perf.counter ??
|
|
|
|
|
does the visual studio .NET IDE provide a local VCS system ? ( simlar to that found in like in Intelij idea [tools > local VCS])..Is there way to enable CVS found in File>Source control...?
samitha
|
|
|
|
|
Hi all ,Forgive my bad english,please.
I'm new user in c#.I have one problem about struct and pointer.
I want to create c# API that call DLL file in c++ .
//DLL sample as below(c++):
struct TESTA
{
DWORD A;
WORD B;
WORD C;
BYTE D[16];
};
typedef TESTA* LPTESTA;
BOOL CBook::InitialButton(LPTESTA pInfo)
{
//statement
return true;
}
//C# code as below:
unsafe public class callDLL
{
[StructLayout(LayoutKind.Sequential)]
public struct TESTA
{
public int A;
public ushort B;
public ushort C;
[MarshalAs(UnmanagedType.ByValArray, SizeConst= 16)]
public byte[] D;
}
[DllImport("dllname.dll")]
unsafe public static extern bool InitialButton(void* pInfo);
}
public class Initialize_sequence
{
unsafe static void Main(string[] args)
{
callDLL.TESTA pInfo=new callDLL.TESTA();
Console.WriteLine(Marshal.SizeOf(pInfo));
callDLL.InitialButton(&pInfo); //error happen
}
}
error message show "Can't get position and size of Mananged type"
Any one can provide idea for me ? Thanks.
hello ALL..^^
|
|
|
|
|
Instead of using the "unsafe" keyword in C# and using void* in the extern function signature, try this:
<br />
public static extern bool InitialButton(ref TESTA pInfo);<br />
and in the call to the function you would just do
<br />
callDLL.InitialButton(ref pInfo);<br />
The marshaller should automatically treat this as a pointer.
|
|
|
|
|
I modified it as your suggestion.
It is ok .
Thank you very much.
hello ALL..^^
|
|
|
|
|
Hi,
I am having two windows application Client and Host and one class library Customer. Host application holds the instance of Customer class. Customer class contains one windows form. It exposes a method to show that form.
Client application connects to Host through Remoting and get the Customer class.
When I try to open that form through the proxy_object, the form is being shown but the controls are not painted and it is in a hanged state.
Can anybody help me on this.
Thanks in advance
Regards,
Sabari.
|
|
|
|
|
You have to invoke the showing of the form so this is executed in the context of the main UI thread. Take a look at the Control.Invoke method.
www.troschuetz.de
|
|
|
|
|
How do I enable tracing? I put a "#define TRACE" in my code and it still does not print:
#define TRACE
using System;
namespace ConsoleApplication1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
System.Diagnostics.Trace.WriteLine("testing trace");
}
}
}
thanx, amir
|
|
|
|
|