2

Google Earth で、地球儀をクリックすると、KMLTreeView で選択した項目の背景色が薄暗くなります。私の C# ベースのアプリケーションでは、TreeView ノードがすべての色を失うため、どの項目が選択されているかわかりません。

同様に、関連する目印をクリックするとツリービュー ノードが強調表示されるようにしたいと考えています。

これがデフォルトの動作だと思いますので、目印を kmltreeview に適切に関連付けてはいけません。以下は、kmltreeview コントロールと同様にノードを作成してグローブに追加するために使用するコードです。デフォルトの動作を使用できるようにするために、私が間違っていること、またはしていないことはありますか?

ありがとう!

dynamic placemark = KmlHelpers.CreatePlacemark(ge1,
                                               Coord,
                                               d.sSerialNumber,
                                               d.sNickname,
                                               "Device Type: " + d.sName + "<p>" +
                                               "IP Address: " + d.sIPAddress + "<p>" +
                                               "ESN: " + d.sSerialNumber + "<p>" +
                                               "<a href=\"http://localhost/index.html#"
                                               + d.sSerialNumber + "\">Details</a>");

var styleMap = ge1.createStyleMap("");

// Create normal style for style map.
var normalStyle = ge1.createStyle("");
var normalIcon = ge1.createIcon("");
normalIcon.setHref("http://maps.google.com/mapfiles/kml/shapes/truck.png");
normalStyle.getIconStyle().setIcon(normalIcon);

// Create highlight style for style map.
var highlightStyle = ge1.createStyle("");
var highlightIcon = ge1.createIcon("");
highlightIcon.setHref("http://maps.google.com/mapfiles/kml/shapes/truck.png");
highlightStyle.getIconStyle().setIcon(highlightIcon);
highlightStyle.getIconStyle().setScale(2.0);
styleMap.setNormalStyle(normalStyle);
styleMap.setHighlightStyle(highlightStyle);

// Apply stylemap to a placemark.
placemark.setStyleSelector(styleMap);

kmlTreeView.ParseKmlObject(placemark);
4

1 に答える 1

2

KmlTreeViewは標準のTreeView コントロールを継承しているため、 HideSelectionプロパティを使用できます。デフォルトでは、これは に設定されていますが...True

このプロパティが false に設定されている場合、TreeView コントロールで選択されたノードは、TreeView コントロールがフォーカスを失ったときに、現在の選択色とは異なる色で強調表示されたままになります。このプロパティを使用すると、ユーザーがフォーム上の別のコントロールをクリックしたり、別のウィンドウに移動したりしたときに、ユーザーが選択した項目を表示し続けることができます。

コードでこれを行うには、たとえば次のようにします。

kmlTreeView.HideSelection = False;

また、コントロールのビジュアル デザイナーでプロパティを設定することもできます。単に KmlTreeView を選択してから、プロパティを表示します。最後に、をダブルクリックしHideSelectionて設定しますFalse

アップデート:

質問の 2 番目の部分 (対応する機能がクリックされたときにノードを強調表示する) については、カスタム イベント ハンドラーを作成してから、KmlTreeView のGetNodeByIdメソッドを使用する必要があります。次のようなものが機能するはずです。

private void GEWebBrowser1OnPluginReady(object sender, GEEventArgs geEventArgs)
{
    this.geWebBrowser1.AddEventListener(geEventArgs.ApiObject.getGlobe(), EventId.MouseDown);
    this.geWebBrowser1.KmlEvent += geWebBrowser1_KmlEvent;
}

void geWebBrowser1_KmlEvent(object sender, GEEventArgs e)
{
    // the feature that the mousedown event fired on
    dynamic feature = e.ApiObject.getTarget();

    // If you have other events added you will need some conditional logic here
    // to sort out which event has fired. e.g.
    // if(e.EventId == EventId.MouseDown)
    // if(GEHelpers.IsApiType(feature, ApiType.KmlPlacemark);
    // etc..

    string id = feature.getId(); // the features id
    KmlTreeViewNode node = myKmlTreeView.GetNodeById(id);   // find the corresponding node...    
    if(node == null) { return; } // no corresponding node...

    // set the selected node to the feature node.
    myKmlTreeView.SelectedNode = node; 

    // make sure the node is visible in the treeview
    if (!node.IsVisible)
    {
        node.EnsureVisible();
    }
}
于 2012-11-29T01:55:21.870 に答える