VB6 to VB.NET conversions button style - c#

We have recently converted an old VB6 application to VB.NET via VS2008. The program is being launched via a c# WPF project that brings up the some of the VB.NET Forms ad hoc.
There is an issue with the way some of the controls that are being displayed.
If for example we add a new button (Button1) control like this:
When compiled it displays like this:
So the "Close" button was converted in and the "Button1" was added after conversion. The styles of the buttons are obviously being effect somewhere.
I have looked in the design file and I can't see anything obvious.
How is this handled?

I think this may be due to the Enable Visual Styles Setting. I'm guessing this was not set to True when the project was upgraded? Possibly an automatic thing so that the application looks as similar to the original as possible.
More Info here: http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.applicationservices.windowsformsapplicationbase.enablevisualstyles(v=vs.110).aspx
And here: http://msdn.microsoft.com/en-us/library/aa984291(v=vs.71).aspx

Related

Is it possible to set the WPF RenderMode in the XAML file?

I have built a GUI with XAML and Powershell. The problem is that certain visual elements such as dropdown menus are not visible when viewing the application remotely via VNC.
My search led me to this piece of code that I am supposed to run in the OnLoad method of the window to force the RenderMethod to SoftwareOnly:
RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;
However, this is C#. My code-behind is Powershell.
So is there a way to either do this in Powershell, or to set the RenderMethod of the Windows in the XAML file?
The real reason I'm asking this question is because the answers provided here do not work for me. The alpha-blending option simply does not exist in recent versions of UVNC.

Native UI using WPF

I'm switching from Windows Forms to WPF, but WPF's GUI is really ugly. It looks like Windows 95 or something like that.
Example:
Left is a new WPF project
Right is a new Windows Forms project
Both only have a button and textbox added to the project, no other changes.
As you can see, WPF doesn't have the "native Windows GUI". I know that I can use themes, but I just want the native Windows GUI. Isn't there any setting to do this without themes? I've found this but I didn't change anything in the project except for the button and the textbox and it still doesn't look native.
See this workaround. there's some button styles there to make the buttons look more similar to the native ones. Other than that, see here the official statement from Microsoft that this difference is actually by design. They made intentional changes to the themes to make them more lightweight by removing gradients and such.

How to show a VB.NET form based on a referenced C# assembly event firing?

My first time asking a question here so apologies upfront if I'm not doing this right. I could not find anything with the search.
I inherited a VB.NET legacy Windows Application project. Any and all new additions as far as possible I would like to code in C#, including new Windows Forms. So, I have a new Windows form in a C# assembly (not sure if this is the best way) being referenced by the VB.NET Windows application.
On initialising the C# form from the referenced assembly I pass it all the necessary parameters from which I will build up my grid columns and records in the C# Windows Form. No problems here so far.
On the cell-double click event of the C# grid, I would like to show an existing VB.NET Winform from the application referencing the C# assembly.
My question is: How do I get a handle on the VB.NET Windows Form to show it, or do anything else with it for that matter? Circular reference is obviously not allowed so how can I achieve this if at all possible, C# or otherwise?
You should be able to add an event handler to the object.
http://msdn.microsoft.com/en-us/library/6yyk8z93%28v=vs.90%29.aspx
One way would be to pass a generic form creation handler to your C# Form, given that it is instantiated from your VB.NET code. This way the form wouldn't have to know what exact type of form it must create and show; all it would know is that it's a Form, which is good enough if all you have to do is showing it.
You may also consider exposing your C# Form cell double click event as a public event that can be handled by your VB.NET code.
If it makes sense in your design, a third option would be to use a third assembly that acts as a bridge. This assembly could be referred by both your VB.NET and C# assemblies and hold interface types implemented / used in these.

How to list all the elements of an application?

I'm trying to click a button on a windows application from other application. Basically, I want to click app B's button from app A's code.
I can use winapi findWindow to get a handler. The problem is that I have no idea the name of the button on the app B. Is this possible to list all the names or ids of an application?
I'm using c# to make it happen.
Since you're looking at suggestions (it's a pretty generic question really, it might or might not work depending on what other app/window is, is it e.g. browser or a 3rd party app etc., does it support automation)
Take a look at this closely related answer (it might be a duplicate but you're kind of 'looking for' still so maybe note).
Accessing Elements from Other Processes
Also this one on how to 'access' other app's 'inputs'
Pinvoke SetFocus to a particular control
I have not tested this. But it looks like a intressting libary. Maybe there is some function you can use. It is called White. This is just a sample:
Application application = Application.Launch("foo.exe");
Window window = application.GetWindow("bar", InitializeOption.NoCache);
Button button = window.Get<Button>("save");
button.Click();
You can use tool such as Spy++ (included in any Visual Studio except Express editions) to find name and class of that button and then use these information as parameters of FindWindow().

Visual studio 2010 showing available events from code behind

In work and in home I have VS2010 installed. But in work I have this one cool feature. On the code behind file I have two drop downs. When I select some object in the left one lets say a testButton or Default2 (a page class), on the right one I get all available events for that object and when I select an event Visual Studio autogenerates it in my code-behind file. In my home VS I actually have does 2 drop downs but they work different. I have available objects on the right one but when I select for example the testButton it shows me the aspx page and points this button :/ Should I set sommething in the VS configuration or maybe in work I have some addon which I'm not aware of? Any ideas?
This is not a VB-exclusive feature.
What you're looking for is called a navigation bar. In Visual Studio options, open Text Editor → C# → General, and you'll see an option called Navigation Bar. Enable it and click OK.
However, I believe this bar works a bit differently in VB and in C#. In C#, it only lists the existing classes and their methods; in VB, it will list all your controls and their events even if those don't exist yet.
Ok I think I've found the answer. It seems that this feature is only available when the current file is in VB.Net. In my opinion this suks :/
You need to go the design view, in the Properties box, click on Events (lighting bolt) and double click on the events you want to code behind:
(source: byte.net)
#shin is correct, this is a VB.NET only feature; Microsoft only had feedback reports dating back to 2004 mentioning this feature, so I have opened a new bug request with Microsoft regarding this; and also added feedback to Visual Studios account on UserVoice...
https://connect.microsoft.com/VisualStudio/feedback/details/688175/vs2010-c-add-page-event-handlers-to-asp-net-using-codebehind-navigation-bar-the-same-way-as-in-vb-net
http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2244558-allow-c-to-add-event-handlers-to-classes-using-co
I encourage everyone who this issue effects to go and vote up & confirm this issue with them.
I dislike that C# doesn't provide such a useful time-saving function.
Up to Visual Studio 2010, only Vb.net has this feature: on code-behind page, the code panel upper-left drop down shows a control's name, and the right drop down shows this control's available events. When clicking this event we can get the code-block for this event. This feature is not available in C#.
Without above feature, we can still get a control's available events for both C# and Vb.net: We must select the control on the aspx page and choose the design view at the lower left corner, then on the Properties panel click the Event button (the lighting sign), then available actions will be shown, double-click the name of the event you want, the event code will be generated in code-behind.
It is most certainly is a VB only feature and has been reported on numerous occassions to Microsoft.
It is possible to see all the available Events in C# & Asp.net too, but not inside code window as possible in VB. But you can see all Events of any selected Control in its Property Window. Open Properties, then Click Events.
This and the feature to generate event handlers without having to switch to Design view for C# is finally coming in Visual Studio 2012. It was about time.
Even the 2012 feature is not enough. You still have to guess for Page level events (Init, PreRender, etc) and also files that haven't already been filled out for you like Global.asax, which depending on the template you started with may or may not have all the event handlers already specified.
Agreed that Event Handlers is one of the things VB has for years and years and years handled way better than C#. I can't count the number of times I've had to remind a fellow C# developer that some events do, in fact, exist.

Categories