Changing the default file path for icons in Visual Studio - wpf

On a WPF project, if I have an image and click on 'Source' and then 'Add' I get the choice to import images into the project. Is there a way of changing this file location?
VS2010 currently defaults to the "Libraries / Pictures" setting. I'd rather not change where this library points to as I don't store icons and pictures together.
After a bit of research I set up a new Windows library (useful article here) for icons but I can't work out how to set VS to default to the icons library I created, does anyone know how to do this?

Using Process Monitor on my machine when doing this, I see the following:
Calls to RegOpenKey, RegQueryKey aimed at:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32
This seems to be a list of the last projects I've added/opened in Visual Studio. To test this, I added a project from a different location to my solution, then tried to change the source of the image.
Sure enough, the dialog defaulted to that location.
Your mileage my vary, but certainly, on my machine, the behaviour seems tied to what project I opened last. You can use Process Monitor to monitor devenv.exe while you choose an image on your machine to see what happens.
Given this, though, it would seem that you can't change this behaviour, although you can influence it.

Related

INSTALLSHIELD setup User may search for their personal or business logo and apply

Every windows screen in our WPF application displays the ICON in the upper left corner. Numerous users of this program have the expectation of seeing their company logo.
We made the logo.ico file a "always copy" so that it is copied into the bin location along with every build. ICON is referring to the logo.ico file in this case.
The logo.ico file's icon will be reflected on the Windows screen if we go ahead and replace it with any other image.
We cannot expect the customers to accomplish this, so we must make it easier for them to browse the icon file during installation. InstalledShield software is used to prepare the installation setup. If there is a better way, please describe it here. I seek advice on how to accomplish this.
I would like you to check why the icon is getting reflected if you replace it with any other image, windows has some specification on the image size to display the icon/tile on the screen. See whether your icon is meeting all those specification to reflect it on the screen.
https://docs.revenera.com/installshield26helplib/helplibrary/IHelpMarsShortcutProperties.htm#ref-views_3737199233_1323863
you can also find information regarding the icon specification from the Microsoft documentation pages.
Apart from that, if you want to show up a browse dialog during the installation then you need to modify your InstallShield project:
1- To launch a browse dialog from the Basic MSI project:
https://docs.revenera.com/installshield23helplib/helplibrary/FileOpenDialog-HowTo.htm
2- To launch a browse dialog from an InstallScript project:
https://community.flexera.com/t5/InstallShield-Knowledge-Base/Displaying-a-File-Browse-Dialog-in-an-InstallScript-Project/ta-p/3964
But, my preference to you to check why the icon is getting reflected if its replaced with other image, and fix it.

Why is Visual Studio 2017's new AutoScale support resizing my Forms app at runtime?

We have a Windows Forms application used for testing our products that has had pretty much the same forms and dialogs for nearly 10 years now. AutoScaleMode in the designer is set to Font for both forms, and that hasn't changed since the original design. AutoSize is set to false and just for good measure (I guess) AutoSizeMode is set to GrowOnly. The following source lines are in Program.cs:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Remember, this has been working flawlessly for years...
One of the recent updates to VS2017 included AutoScale support for monitors with different DPI. I have a relatively high DPI monitor, so when I made some changes to a Settings dialog (adding controls, etc) I started getting bright yellow banners cross the top of the designer surface telling me that AutoScaling was set to 125%, and would I like to change that? I tried going back and forth, and when in 100% mode (Autoscaling off) I was warned that XAML forms might not display correctly. Fine, I am working with Forms so I went back to "normal" scaling and the form looked fine.
Until I tried running the program. Now when I start the program the main form looks like this (details deleted to protect the guilty):
...but when I open the settings dialog it looks like this:
Yikes! It looks worse in practice, the relative images here don't do justice to the difference in size and scale.
I have no idea what got changed or how / why this is happening, but there's no way I can put this into production. I've tried changing the AutoScale settings, to no avail. Can somebody point me in the right direction here?
Thanks in advance!
EDIT: It seems the rescaling only happens on my machine when I run the app in Debug. Whatever is messing up the display of the forms on my machine doesn't do that on my associates' machines and isn't replicated to the executable produced by the build server.
On another note, I tried every DPI-related setting I could find, added those that weren't there due to the program's age, all to no avail. Nothing I have tried has had any effect on the program's display weirdness on my machine. Ugh.
I tried all the tricks I could find, short of disabling AutoScale completely, and nothing worked. I finally merged our develop branch in to my feature branch and inspected all 270 edits, choosing the oldest settings I could find for all size parameters, all controls. Ugh.
Along the way I stumbled across the following line in the Designer.cs file for the form:
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
This setting is NOT accessible from Visual Studio's designer, as far as I can tell, nor can I find anything about how or why it gets set. What I did find was that in the earlier version that did work as expected, the values were (8F, 17F) -- so I manually edited the line to match the older, working version. Success!
I also checked my Windows display settings, and the Custom Scaling value was at 100%, so I used the registry hack mentioned in one of the articles I found following the first link from the comment above (thanks, #Jimi) to disable auto-scaling in Visual Studio, then turned off the notification. Now I'm (finally) back in business.
Registry hack is here:
https://learn.microsoft.com/en-us/dotnet/framework/winforms/disable-dpi-awareness-visual-studio
If one uses the registry hack mentioned in the answer from DaveN59, and there is already entry for your ...\devenv.exe (mine was previously set to run as admin) then add the DPIUNAWARE string to the end of the "Data". Make sure to use a space as a separator.
Example: ^ RUNASADMIN DPIUNAWARE
I'm not sure what the ^ is for, but it was there and I just added DPIUNAWARE string. Also, if you just add this string, it will come up unscaled, but you will still see the yellow banner. To turn that off you'll need to select that option from with in Visual Studio. The instructions are in the link for the registry hack, also provided above. For conveinece here's the menu navigation path.
To disable notifications, choose Tools > Options to open the Options
dialog. Then, choose Windows Forms Designer > General, and set DPI
Scaling Notifications to False.

Making icon for a Windows Form: How to make it show up correctly?

OK, so I have built a Windows Form application. I now want an icon for it. So I use the Icon Editor built into Visual Studio 2012. Draw it all out to look nice and purdy. Once I am done, I have a .ico file and I make it the default icon for the project, and also the icon for the one WinForm in the application.
Unfortunately, it does not show up as I have created it! It is displayed as the default icon file as it existed before I modified it in the icon editor. It's a 32x32 4 bit icon. If I change the extension to .bmp it shows up as the default.
It looks like the VS icon editor is editing something else, not the appearance of the icon. Can someone tell me what I am doing wrong?
I used to have a progam called IconArt that would create icons that looked like icons when I used them in VS. IconArt is now abandonware and won't run on my 64bit Windows workstation.
Since I didn't get any answers within the time I was hoping, I posted this question also in the MSDN Visual Studio forum, and got a good answer that I thought I should post here. Credit to Reed Copsey, Jr, for the answer!
This is it:
You'll need to put your design in all of the different versions. ICO
files contain multiple versions of the same image, for different
screen resolutions.
My personal preference is to not use VS - there's an ICO plugin for
Paint.Net (all free) which allows you to make a single image
(typically 256x256), and save multiple versions within an ICO file in
one shot. It's very useful for building icons.
See
http://forums.getpaint.net/index.php?/topic/927-icon-cursor-and-animated-cursor-format-v37-may-2010/
for the plugin.
Since I am a Paint.Net user, the plugin sounded like a great idea, and I tried it. Bingo! This works very nicely.

Where do I set properties in a VS 2008 Setup project?

I have a WinForms project in Visual Studio 2008, and I've created a Setup project for it. I can build this and it picks up the dependencies and creates the .exe and .msi. But I would like to customize it a little bit, for example by specifying my company name and changing the default 90s-style clip-art logo that appears when the installer executes. But I cannot find anything resembling a properties page where I would do any of this. If I right-click on the Setup project and go to Properties it just gives me options about the output file name, compression of the installer, etc.. Is there some other place I need to go to change things like my company name, the product name, and the image?
If you highlight the project, there will be new icons above the solution explorer.
These buttons are for the file system, registry, etc. Anything that is effected by the setup.

Final steps in using MVVM to decouple GUI from business logic?

Just recently, I learned about using MVVM to decouple GUIs from the underlying model. I ended up learning as much as I could to convert my current application over to MVVM, and was largely successful. Now I need to figure out how to actually take a GUI generated in Blend and use it in place of my current GUI, which was designed in Visual Studio. I can't find any resources on the web for making this as seamless as possible. I'd like to know what you all have done and have had work for you.
My ultimate solution would be something that would allow me to, at runtime, select a skin from a menu and immediately have the GUI change from the current one to another that the user selects. Can anyone point me to posts that explain how to do this?
My current goal is less ambitious -- I'd like to be able to add my new Blend GUI into my Visual Studio project and when I compile, have the new Blend GUI appear. If I want to go back to the old GUI, I would have to recompile. For now, that is okay.
I've got my Blend project added to my VS2008 solution, and have set it to be the startup application. That works fine -- if I run the app, my new GUI appears instead of the old one. The problem now is that it needs DLLs that are actually in a different folder -- the bin\Debug folder of the original startup application. Am I supposed to leave my original GUI as the startup application, and then have its App codebehind load the other GUI?
Also, each of the respective GUIs needs a reference to the ViewModel. In my case, I was just instantiating it in my current GUI class. For the Blend GUI, I instantiated one there as well, since only one of the GUIs will be active. Is this where something like the Unity framework should be used?
Sorry about all of the possibly-incoherent questions, but I'm not quite sure how I should proceed from here. I feel like I'm so close to proving to myself that MVVM is the way to go from a GUI standpoint (I'm already sold on the testability bit).
All the examples I've seen dynamically switch GUI appearance by using some form of ResourceDictionary swapping. A few links:
Load XAML Resource Dictionaries at Runtime
WPF change theme/style at runtime
Hope that helps.
I found a mistake, where in one part of my code I was using the wrong property to get at the currently-running assembly's path. I am now using
System.Reflection.Assembly.GetExecutingAssembly().Location
Although this does work, it only works if I copy the exe from the Blend project's bin\Debug folder into my main application's bin\Debug folder. I will have to live with this by using a post-build event, I guess. I was so spoiled for the past several months working with .NET, where I didn't have to do this (like before in C++) because all of the referenced assemblies get automatically copied over. If I want to debug any code-behind, I also have to set the starting executable in the Blend project's settings, which is inconvenient as well, especially when working on different computers where the paths aren't set up the same. Any suggestions here would also be appreciated!

Resources