POST
|
To respect the definition query for a layer, use IFeatureLayer.Search. Replace: Set pFCursor = pFLayer.FeatureClass.Search(Nothing, False) With: Set pFCursor = pFLayer.Search(Nothing, False)
... View more
09-06-2011
07:23 PM
|
0
|
0
|
1771
|
POST
|
On this What's coming in ArcGIS 10.1 page, I found the following: At ArcGIS 10.1 there will not be an ArcObjects VBA SDK nor will we support new VBA development with ArcGIS for Desktop. There will be an optional separate setup for legacy VBA support in the ArcGIS applications. This will require an additional license authorization similar to ArcGIS 10. We are making VBA available if needed so existing solutions can continue to work while the code is being migrated to .NET. We recommend all users with VBA code start migrating now to an add-in or custom extension using the ArcObjects SDK for .NET or Java. This is the end of Esri's support of VBA as a development or customization language for ArcGIS. Is this a softening of the hard cut-off that seemed indicated in the ArcGIS 10.0 to 10.1 Deprecation Plan document? Does not supporting new VBA development, yet supporting legacy VBA mean that it will run, but not be editable in 10.1 (with the additional setup and license, of course)? I am writing Add-Ins going forward, but it would be nice to know precisely what the status is for VBA.
... View more
08-31-2011
02:11 PM
|
0
|
9
|
8017
|
POST
|
Like Neil wrote, you can't directly retrieve an IFeatureLayer from an IFeatureClass. And if you are adding a new layer, you do it the way he states. However, if you are trying to get an existing layer from its feature class, you can iterate through the layers in a map and compare the source feature class of each feature layer looking for a match. Of course, be aware that a single feature class can be the source for more than one layer.
... View more
08-30-2011
08:33 AM
|
0
|
0
|
725
|
POST
|
You need to move your form reference outside of OnClick, and not set it to Nothing:
Dim myForm As frmWindowsForm
[in class constructor, set this]
myForm = Nothing
Protected Overrides Sub OnClick()
If myForm Is Nothing Then
myForm = New frmWindowsForm
End If
If myForm.Visible Then
myForm.Hide()
Else
myForm.Show()
End If
End Sub
... View more
08-23-2011
10:32 AM
|
0
|
0
|
227
|
POST
|
Regarding removing items from a list in a For loop, you can run them in reverse to avoid the invalid index(es) at the end:
For lngX = pMxDoc.FocusMap.LayerCount - 1 To 0 Step -1
And you might want to look at using a recursive function to handle digging through group layers.
... View more
08-20-2011
10:15 AM
|
0
|
0
|
483
|
POST
|
Hello Juliet, Below is a very rudimentary way of comparing the value of one field in two selected features. You could call this method from a button click in a C# Add-In. If you are working in VBA or VB.NET then it will be a little different, but the interfaces used will be the same. Of course, replace the "YOUR_FIELDNAME" in the code with the actual field name.
public void PerformTest()
{
// Get the selection in TOC.
object item = ArcMap.Document.SelectedItem;
// Make sure it is a feature layer
if (item is IFeatureLayer)
{
IFeatureLayer featureLayer = item as IFeatureLayer;
IFeatureSelection featureSelection = featureLayer as IFeatureSelection;
ISelectionSet selectionSet = featureSelection.SelectionSet;
// Make sure exactly 2 features are selected
if (selectionSet.Count == 2)
{
// Get a cursor
ICursor cursor = null;
selectionSet.Search(null, true, out cursor);
// Get the index of the subject field
int fieldIdx = featureLayer.FeatureClass.FindField("YOUR_FIELDNAME");
// Typically you would cycle the rows of the cursor in a loop, but since
// we know we have exactly 2 rows to compare, just grab them.
// Set current row to first selected feature and get the field's value
IRow row = cursor.NextRow();
string value1 = row.get_Value(fieldIdx).ToString();
// Set current row to second selected feature and get the field's value
row = cursor.NextRow();
string value2 = row.get_Value(fieldIdx).ToString();
// Display the two values
MessageBox.Show("Feature 1: " + value1 +
"\nFeature 2: " + value2);
}
else
{
MessageBox.Show("Please select exactly 2 features.");
}
}
else
{
MessageBox.Show("Please select a feature layer.");
}
}
... View more
08-16-2011
01:19 PM
|
0
|
0
|
674
|
POST
|
Interesting. It seems the OnSelChange event gets triggered before the combobox list closes up, so clicking on the MessageBox window causes focus to leave the combobox and it closes up without changing the selected index (stays at initial), and then re-enters the event opening a second MessageBox. You can see this easier by dragging the second one off to the side. Also, while looking for workarounds, I noticed that the OnFocus event is never triggered. Running the sample provided in the documentation exhibits the same problems: ESRI.ArcGIS.Desktop.AddIns ComboBox OnFocus_Method
... View more
08-12-2011
02:03 PM
|
0
|
0
|
692
|
POST
|
Ryan, Thanks for posting the work around, which makes it look better under the circumstances. I agree the "designed" behavior is odd.
... View more
08-05-2011
09:52 AM
|
0
|
0
|
546
|
POST
|
Hi Mike, I believe you can achieve this in an extension as an addition to the way we handled the top menu in your other post: Modify-(add)-to-MAIN-Toolbar-with-Addinx-files. Just call this little method in the same event handlers (sorry for the C#, but I'm sure you can convert it to vb.net easily):
private void SetButtonStyle()
{
ICommandBars commandBars = ArcMap.Application.Document.CommandBars;
ICommandItem commandItem = commandBars.Find(ThisAddIn.IDs.YourButtonClassNameHere, true, false);
if (commandItem != null)
{
commandItem.Style = esriCommandStyles.esriCommandStyleIconAndText;
}
}
Again, not thoroughly tested, but works for me on a quick test. The code you included in your initial post was a big help.
... View more
08-02-2011
09:32 AM
|
0
|
0
|
1676
|
POST
|
Hi Dennis, The current version of the ESRI Digital Signature Wizard (as of 10.0 SP2) does not implement the use of a timestamping server to write a signed timestamp into the signature, nor does the code in ArcGIS that validates Add-Ins look for one and handle it. Both only use the simple signing date of the signing machine. So all you specify on the wizard is the file to be signed and the certificate with which to sign it. As of 10.0 SP2, a signature is validated by ArcGIS as Authenticated if the Add-In was signed on a date before the code-signing cert expired. However it will still be noted as an expired cert in the Add-In Installer after the cert's expiration date. It would be more secure to implement true timestamping via server, and more compliant with typical code-signing practice to not display signatures as expired that include a valid timestamp signature.
... View more
07-29-2011
07:32 PM
|
0
|
0
|
895
|
POST
|
Hi Fossi, Thank you for posting back with the additional information about adding tools to a main menu. Also, you're right about that line in the GetMainMenuBar() method not being necessary. I had quickly adapted the code from the sample at Applying Startup Customizations, and just left that there. Good weekend to you too!
... View more
07-29-2011
09:46 AM
|
0
|
0
|
483
|
POST
|
I commented out both GetAppInfo and PopAppCmgenTables methods and stopped the code after 20 minutes because it took the same amount of time to get through 7 of 17 records as the original code so it looks like the bottle neck is somewhere in there. If I am reading this correctly... If you comment out those two methods and the operation is still just as slow, then the bottleneck is not in those methods.
... View more
07-28-2011
09:00 AM
|
0
|
0
|
1125
|
POST
|
Hi Fossi, See this thread, Modify-(add)-to-MAIN-Toolbar-with-Addinx-files for some info on getting a menu to show initially.
... View more
07-28-2011
08:54 AM
|
0
|
0
|
483
|
POST
|
Hi Mike, I found a way to push an Add-In menu onto the main menu bar in an Extension Add-In. Below is some raw C# code that seems to work in limited testing. It is based on code from the resource center: Applying user interface customizations at startup The steps are: 1. Use the Add-Ins Wizard in Visual Studio, and add a Menu type Command Bar, set it as a Root Menu, and assign one or more buttons as items. 2. Use the Add-Ins Wizard in Visual Studio and add an Extension set to autoload. 3. Replace the guts of the extension class with the following:
public class TestAddToMainMenu : ESRI.ArcGIS.Desktop.AddIns.Extension
{
public TestAddToMainMenu()
{
}
protected override void OnStartup()
{
WireEvents();
}
protected override void OnShutdown()
{
}
private void WireEvents()
{
ArcMap.Events.OpenDocument +=
new ESRI.ArcGIS.ArcMapUI.IDocumentEvents_OpenDocumentEventHandler(Events_OpenDocument);
ArcMap.Events.NewDocument +=
new ESRI.ArcGIS.ArcMapUI.IDocumentEvents_NewDocumentEventHandler(Events_NewDocument);
IApplicationStatusEvents_Event appStatusEvents =
ArcMap.Application.Document.Parent as IApplicationStatusEvents_Event;
appStatusEvents.Initialized += new IApplicationStatusEvents_InitializedEventHandler(Events_Initialized);
}
void Events_Initialized()
{
// Need this to load menu when no document loaded at startup
LoadCustomMainMenu();
}
void Events_OpenDocument()
{
LoadCustomMainMenu();
}
void Events_NewDocument()
{
LoadCustomMainMenu();
}
private void LoadCustomMainMenu()
{
ICommandBar mainMenuBar = GetMainMenuBar();
// make sure we got the main menu bar
if (mainMenuBar == null)
return;
// check if our custom menu is already there
string menuID = "REPLACE WITH MENU ADDIN ID"; // ID of Add-In Root Menu
ICommandItem cmdItem = mainMenuBar.Find(menuID, false);
// skip out if custom menu already there
if (cmdItem != null)
return;
System.Diagnostics.Debug.WriteLine("**** MENU ADDED ****");
// Add Menu, if needed
UID uid = new UIDClass();
uid.Value = menuID;
Object indexObj = Type.Missing; // adds menu at far right
ICommandBar myMenu = mainMenuBar.Add(uid, ref indexObj) as ICommandBar;
((ICommandItem)mainMenuBar).Refresh();
}
private ICommandBar GetMainMenuBar()
{
try
{
//Grab the root menu bar
UID uid = new UIDClass();
uid.Value = "{1E739F59-E45F-11D1-9496-080009EEBECB}"; // Main menubar
ICommandBars cmdBars = ArcMap.Application.Document.CommandBars;
ICommandItem commandItem = cmdBars.Find(uid, false, false);
return cmdBars.Find(uid, false, false) as ICommandBar;
}
catch
{
return null;
}
}
}
4. In the LoadCustomMainMenu method, replace the string value for menuID with the exact id value from the Menu section of the Config.esriaddinx file. As I mentioned, this is proof-of-concept code that likely needs refining to make it more robust. But I hope it helps get you started.
... View more
07-26-2011
10:33 AM
|
0
|
0
|
606
|
POST
|
Hi Mike, I find this a little puzzling too. If I use the Add-Ins Wizard in Visual Studio, and add a Menu type Command Bar, there is an option to set it as a Root Menu: "Specifies whether or not this menu is a root menu. Root menus appear on the main menu bar. The File and Edit menus are examples of root menus." Menu Config XML Schema However, it doesn't show on the main menu bar at startup. I had to open the Customize dialog, select the Commands tab, select "[Menus]", then drag my test menu to the main menu bar. It seems like there should be a Premiere (showInitially) attribute like toolbars have.
... View more
07-25-2011
09:03 AM
|
0
|
0
|
606
|
Title | Kudos | Posted |
---|---|---|
1 | 11-03-2010 01:41 PM | |
1 | 10-04-2011 01:44 PM | |
1 | 11-18-2011 01:22 PM | |
1 | 03-09-2011 07:59 AM |
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:23 AM
|