C# Outlook PST folder click event - c#

I'm trying to find a way to capture a Mouse Click event on a folder inside a PST.
I've looked for events on Outlook.Folder interface but there is none that applies :(
Is there a way to accomplish this ? Thank you

Yes, there is. The Outlook object model provides the following events for the Explorer class:
BeforeFolderSwitch - is fired before the explorer goes to a new folder, either as a result of user action or through program code. Note, the event handler may cancel the action setting the boolean parameter to true.
FolderSwitch - is fired when the explorer goes to a new folder, either as a result of user action or through program code.

If you want to display a webpage for a particular folder, Then you need to set the MAPIFolder.WebViewURL and WebViewOn properties.

Related

VSTO, there is an event when i change open inspector?

good day
I must add a button in the ribbon bar only for few specific mailitem,
i use this attribute to change the visibility.
getVisible="EnableControl"
and i use
IRibbonUI UIrib.Invalidate();
to update the ribbon, there is an event that run when i change focused ispector, so i can check if the button must be displaied or not
or a totally different way to do do this control?
Thanks for your support.
Best regards
You could refer to the link below: Switch focus to Outlook active window .
If you can't solve your problem, please let me know and I can give you a solution.
Whenever Application.Inspectors.NewInspector event fires, call IRibbonUI.Invalidate. Outlook will invoke all button state callbacks, including the getVisible callback.

Visio: catch switching window/document event

I developed an add in for Visio and I'm having some trouble with catching
certain events. I have a custom ribbon for my add in and what I already can do,
is enabled or disabled (show/hide) it based on the document.
But now I would like to have multiple documents open and check when switching to
another document if the ribbon should be enabled or disabled. However I can not seem to find the right event code for this. I tried the following codes but with no luck:
- PageChanged
- WindowChanged
- BeforeWindowPageTurn
- WindowTurnedToPage
So concretely what I would like to do is catch the event when one document loses focus and another one gets the focus.
You could listen to the Application.WindowActivated event and then in the handler, inspect the ActiveDocument or the window.Document property (in the eventargs) to decide whether it is a document that you're interested in. You might also want to listen to DocumentCreated and DocumentOpened (on Application) and only start listening to the window event once you know that the application might be handling one of your documents.

C# Gecko Browser Drop Event Simulation

I want to simulate drop event in my code on an outside control.
I am using a Gecko browser which connects to outside web application, which code I don't have access to.
I was thinking about two solutions to this, the first would be to simulate drop event providing a filepath, however what I did below is not working:
GeckoNode dropbox = ContentFrame.GetContentDocument().GetElementsByClassName("filepicker dropzone dz-clickable").FirstOrDefault();
if (NodeType.Element == dropbox.NodeType)
{
DependencyObject fakeobject = Application.Current.Windows[0] as DependencyObject;
GeckoHtmlElement drop2 = dropbox as GeckoHtmlElement;
drop2.Focus();
DragDrop.DoDragDrop(fakeobject, path, DragDropEffects.Copy);
}
The element which I can drop files into, on mouse click opens the "open file dialog".
The second, probably harder solution would be to somehow capture the dialog box and paste my path into it.
Or maybe there is a way to make my code still running independently of dialog box that appears and use SendKeys or something like that?
Thank you in advance for your help! (Two days of googling didn't bring me any useful results..)
Edit:
As there were no answers, maybe anyone could answer a simpler question:
How to simulate the drop event just in WPF/WinForms? What are the steps and declarations prior to use DoDragDrop (or similar) interface? I am trying to drop a file on a droppable control (simulated in C# code) on an external Website.
Thank you!

Oultook 2013 InlineResponse - Disable Forward button

I have a Form Server running in Outlook and I specify a different MessageClass (say IPM.Note.Test) for items which are to be handled by my form server. If you select an item, with MessageClass IPM.Note.Test, in the explorer view, and try to Forward from ribbon button, I prevent the user from doing so, by hooking into Forward command.
In OL 2013, if you have reading pane visible, and select an item in Explorer, you can see its preview and can Forward/Reply/ReplyAll from toolbar at the top of the reading-pane, which would create an InlineResponse.
I want to hook into this Forward action, and prevent the user from doing so, as I do for the Explorer-Ribbon Forward command.
I am aware of the Explorer.InlineResponse event which is fired on any action which creates an Inline Response, but this event is fired after the action, not before it, and it fires for Reply, ReplyAll and Forward, all three of them. I only want to intercept Forward. There is no information in the event to tell which action triggered it.
Is there a way to identify the the action which triggered the event, before the InlineResponse is created?
Or is there a way to stop the InlineResponse from being created? (From code, as I know you can disable it in OL options).
Or is there a way to disable these actions/inline response from Explorer.SelectionChange event?
I would appreciate any help.
Thanks.
MailItem object exposes the Actions collection. Retrieve the Forward action, set the Action.Enabled property to true, call MailItem.Save.
You need to set the Enabled property of the corresponding Action object instance to false. True if the action is enabled in the application and false - if the action is disabled.
Thanks guys for taking time to answer this.
Something else came up and I put this issue on hold for a bit.
As I mentioned earlier, I have my own Form Server with a different MessageClass. So the MailItem object I get in ExplorerSelectionChange event, is not a pure Outlook MailItem, its rather my MailItem and unfortunately, at the moment, its unable to get Actions property on it, probably because my Form Server implementation doesnt return a proper one.
So, although, for a normal MailItem, Enabled property will work, it doesnt solve my problem ... :(
I x-posted to Outlook Dev Forum as well, and someone suggested the following:
Private Sub myOlExp_InlineResponse(ByVal Item As Object)
Dim a As MailItem
Set a = Item
If a.To = "" Then
a.Close olDiscard ‘close the mail item
MsgBox "Forward is not supported"
End If
End Sub
Although a bit hacky, and not a great user-experience, but I'm taking this for an answer for the moment, as it works.
Shared here, in case someone else comes looking for it.
Complete thread

C# Form Application: How to avoid deleting the unwanted events "manually" from InitializeComponent()?

This is a simple scenario:
I add an event to a control on the form by double clicking on its field (in Events part). But, then I decide that it was unnecessary and delete the automatically generated method. I'll run the program and it gives an error telling me that the event still exists in the InitializeComponent() and I must delete it from there.
So, is there anyway to avoid deleting the event "manually"? Is there anyway to fully delete it without leaving any trace (specially in InitializeComponent())?
Update: Also, another question arose:
When I delete the method from the code, the method name in the event field will disappear. So, if the InitializeComponent() is linked to these events, why isn't it updated with the empty event field?
You should use again the events grid and right click on the event you have inserted.
Select the Reset Menu option. This will remove the event handler assigned in the InitializeComponent and the code of the emtpy event in the code designer.
Note, that if you add code at the event, Visual Studio doesn't remove the new code.
The best way to do this is through the Properties grid in the Designer. You can click the Reset button or just delete the text and it will remove the event hook-up in the InitializeComponent() method. If your method is empty in your code behind, it will also delete it there:
It makes sense that you would have to manually delete the method body if it contains code in case it accidentally got Reset in the designer or if your method is referenced from some other part of your code. Visual Studio is gong to err on the side of caution.
If you delete the method body first, the reason it is not deleting the references to it probably in part has to do with cutting-and-pasting code. If you wanted to move the method to a different place in your code, the acting of cutting it would sever the references to it. After you pasted it, then you would wonder why your event was no longer be called. Again, error on the side of caution since it's not that difficult for the developer to track down extraneous code.
This pertains to C# 2017. So hopefully it would help others.
I'm new to C# (or at least back to code it) and ran with the same issue.
I commented out the event that I did by mistake. Then in the Error list, you will find an error there because that event is missing. Double click on it. It'll take you to the Designer code that "wires" the event. Once there, find the unwanted event and comment it out/delete it. Take care!
Look at the properties window when you select the Control. Click on the little flash and you'll see the Events listed, along with your event (Click or whatever), and your event will have the name of the assigned method behind it. Just delete that method.
That deletes the method, only if it's empty and otherwise unused though, which is quite reasonable. After all you might have put a lot of work into that event handler. (note: Just tried it again and apparently it doesn't always delete empty methods even though it did a few minutes ago. weird.)
In the designer you go to the events tab for the control in question, select the event that has the unwanted handler; and delete the name of the handler. Then save the form again.
This doesn't delete the method itself I think, (possibly unless it's empty or just been added).
Update
I dare say the reason for why it nearly always doesn't delete the method is because it could be used as a handler on another control's event. After all, in the UI you only asked to remove one event's handler; not every handler bound to that method. Then there's the question of whether the back-end code is dirty (i.e. unsaved) - checking whether the method is empty or not isn't reliable in that case. Yes, all of these could be worked around, but having to delete the method manually isn't exactly a hardship :) and at least this way VS doesn't end up deleting methods you actually want to keep.
Go back to the form and hit CTRL+Z.

Categories

Resources