Extending Visual Studio with a Custom Designer - c#

How do I create a custom Visual Studio 2008 UI designer for a C# file?
For example, when you double click on a DataSet in the Solution Explorer, a UI screen appears that allows you to edit the DataSet, even though it is defined in XML/code (which you can right click and "View Code").
Usually this code is separated from user code in some way, either by region ("Windows Forms Designer Generated Code"), by codegen (".g.cs" for WPF XAML files), or some other means like partial classes.

For some hints on Visual Studio Extensibility, see "Visual Studio 2010 addin writing articles/tutorials?". The Visual Studio SDK may have the information you need.

Well, you'd have to buy into the Visual Studio extension model. There are things you can do with the EnvDTE class. They are however fairly limited, not good enough to do what you want to do.
The next stop is the unmanaged extensibility model, based on COM. That requires writing unmanaged COM code, based on IVxxxx interfaces. Available to 3rd party addon developers like the company that makes Resharper. You have to get a license to write that kind of code, Microsoft won't be convinced you won't crash their product until you show some kind of proof you know what you are doing. You'll have to call, I think it is called the VSIP licence. That's possible, obviously it has been done.
Ask your company's legal counsel to take care of those hurdles.

Related

Adding form designer support for a new language in Visual Studio

I'm experimenting with language support extensions in Visual Studio. The MEF support seems pretty straightforward for the most part--I've got working file type and project file support, syntax highlighting, etc--but the part I can't figure out is the form designer. Somewhere in Visual Studio, there is a mechanism that says "this file uses the form designer and this file doesn't", but for the life of me I can't find any documentation anywhere on how that works, and the stuff I do find that touches on designer support, like this MSDN page, turns out to be a big useless ruaround.
Specifically, I need to know two things:
How to tell VS which particular files are supposed to open with the WinForms form designer? (I'll get around to WPF eventually.)
How to tell VS that the form designer should work exactly the same way as the standard C# form designer, except that it should use this custom CodeDOM parser for serialization and deserialization to and from the target language?
Maybe I'm just looking in the wrong place, but I can't find (useful) documentation or code samples for this anywhere. Does anyone know how to do this?

Adding controls to a form when I only have the reference to it’s EnvDTE

I am writing na Add-In for Visual Studio 2010, and I want it to add controls to an existing Form in an existing Project in an existing Solution, and I already have references to all of them.
As I have the reference to the Project Item that represents the file of the form, I want a reference to the Form per se, then I’ll be able to do anything to it (changing properties, and adding controls).
I have tried some approaches, though I must admit I haven’t ran out of tries. But since this is quite an interesting subject, instead of keeping on beating around the bush, I decided to write this question, so it would be faster for me, and would be registered for future similar doubts from anyone else.
Summarizing:
I have:
EnvDTE.ProjectItem myPrjItemForm
And I want to have:
System.Windows.Forms.Form myFormObject
Have a look at these articles:
HOWTO: Add a control to a Windows form from a Visual Studio add-in
HOWTO: Manipulating controls of Windows forms from Visual Studio .NET add-ins
It's VB code, but as far as I can tell, it illustrates the steps you need to perform.

Components for WPF similar to the simplified Visual Studio

I would like to make a support plug-ins in my program.
For example in my program there are several tabs in one tab is the editor in which the code is written also in that tab has a button run.
After pressing the button run occurs a compilation of source code and its execution.
The results of work are displayed in the other tab.
I would like to find such a component in which there are:
Syntax Highlighting, Debugger, Analogue of solution explorer
Thank you very much for your answers.
I would like to bring more of clarity to my question.
I want to do something similar to that is shown in the screenshots below
On a single tab there is the editor and at the other tab displays the results.
To write plug-ins I'd like to use C #.
I guess the best place to start is AvalonDock from CodePlex, specifically what you are trying to do is a Tabbed User Interface.
Keep in mind that even with a TabbedWindows framework build/debug and syntax highlighting are not for free and you will have to find icons and design the UI mostly yourself.
for code coloring there are also many components, also free, like Scintilla .NET
You obviously understand that Visual Studio is a very complex application, so rewriting portions of it will be difficult. There are components available to help you, like the ICSharpCode text editor. In fact, that whole project is probably quite valuable.
However, when thinking of plugins and actually writing code for it, I'd personally go down the MEF route. In fact, this is the very framework that VS.NET 2010 uses for extensibility. Provide your user/developer with a set of libraries to code against (like an SDK), and let them use a Visual Studio Express edition to write proper code :)
As source code editor you can use AvalonEdit (it is great, in some aspects even better than VS code editor), solution explorer is fairly easy to create and debugger is way too language-specific to be a reusable component (you didn't specify what language are you developing for!).
The whole thing can be packaged into AvalonDock, so you get the draggable and dockable panels - it even has VS 2010-like skin (and again - is very easy to implement even with only very basic WPF knowledge).
Or you can use the Visual Studio Isolated Shell - it allows you to use the Visual Studio interface in your program (the end users don't have to have VS installed!), but it requires extensive knowledge of VS API (if you ever developed VS extension you know what I am talking about). For example Civilization V used this approach for it's modding environment, but the result smells as stripped VS with custom splash screen, not as professional product. There are many buttons and config. options that don't work, some features that would be expected from such program (and easy to do in custom app) didn't get in because it would be nigh impossible to implant them into the VSIS etc...
EDIT: You may also eventually be interested in this.

C# Outlook Addin w/ WPF

I have looked at several tutorials on writing general Outlook add-ins, and have gotten simple examples to work: items in menu, context menu, ribbons, etc.
Many of Microsoft's documentation has send me in circles, or is in VB, so I have run into some questions with what we are trying to accomplish.
Is there a way to add a custom control below the Subject line in a new email? We need to supply a drop-down and add an additional header to emails sent for email tracking. Right now the best I have gotten is adding a CommandBarButton in the "Add-ins" tab of the Ribbon, is there a better method?
Will we run into any issues installing for multiple versions of outlook? (Will only 2007 and higher work?)
Can you host WPF controls directly in a Ribbon, etc.? I know that WPF popup windows work just fine when shown from a CommandBarButton.
Are there some good links out there for what we're trying to do?
2: Multi-version support is a PITA. The hedge-your-bets approach is to develop on a PC running the version of Outlook you want to support; thus you may have multiple setup packages for each supported version. Everybody tries to get around this though, but I've used this approach with success:
Version-Specific UI in Add-ins - Andrew Whitechapel - Site Home - MSDN Blogs:
http://blogs.msdn.com/b/andreww/archive/2008/09/02/version-specific-ui-in-add-ins.aspx
4: Essential resources:
Visual Studio Tools for Office For Office and Outlook for Developers Forums on MSDN
OutlookCode.com
(FYI, I work for Add-in Express)
No, not without implementing the entire message window.
We have to make 2 projects for 2007 and 2010, we are skipping 2003 and below b/c it is much more difficult and would be rarely used.
Can't host WPF in a Ribbon, we're going to display a WPF popup from a Ribbon button press.
Best thing I've found is to just follow the project template in Visual Studio and mess around.
Overall, our add-in is going to do the following:
Make 2 projects for 2010 and 2007 that share a "Shared" assembly
All reusable work is done in the shared assembly
WPF is only displayed via popup windows (you can do a custom task pane, but it doesn't make sense for our add-in)

Is there a utility that can monitor open windows/ in .net winforms?

This is a general question, but I'll explain my specific need at the moment:
I want to find the framework class that enables one to choose an image at design-time. I can find the editor that is used at run-time - its the Drawing.Design.ImageEditor. At design time, however, a different editor pops up which allows one to choose an image from resources.
I'm guessing I could run some kind of program, then open up the image editor, from the property grid, and see what new windows/classes have been created?
Thanks
Yes, you can see what's being used by using another instance of Visual Studio and use Tools + Attach to Process (managed) to look at the call stack. It is a Microsoft.VisualStudio.Windows.Forms.ResourcePickerDialog. That is not something you can use in your own code, the Visual Studio designer assemblies are not re-distributable. Nor would they be useful, they monkey with the design-time state of the project.
Making you own isn't that hard, just use Reflection to iterate the properties of Properties.Resources and find the ones that have the Bitmap or Icon type. Display them in a ListView to allow the user to pick one. Adding resources at runtime isn't an option.
A tool with similar functionality to what you mention is Spy++ which you can find in your Visual Studio folder on the start menu (under the sub menu Visual Studio Tools).
However, if I understand you correctly, I don't think the design time editor you're talking about is written in managed code and even if it was, I'm fairly sure it's not in the framework. It's just part of Visual Studio itself and as far as I know you can't get hold of the source code for that.

Categories

Resources