1

データベースから取得しているデータがあり、それらの値を使用して、Visioダイアグラムの図形のプロパティを設定したいと思います。自分のテンプレートを開いて、シートに図形を問題なく表示します。サーバーアイコンには、「manufacturer」、「network」などのカスタムプロパティがあります。各図形のカスタムプロパティを印刷すると、次の出力が得られます。

形状=サーバーラベル=メーカー値=0

など。まだ値を設定していないので、これはすべて正しいです。Visio 2003 SDK(SettingACustomProperty.cs)のコードを使用して値を設定しようとすると、「この図形には、製造元というユニバーサル名のカスタムプロパティがありません」というエラーが表示されますが、カスタムプロパティは明確に出力されます。表示されます(Visioで図形が描画されたらshapeSheetを表示します)。私はSettingACustomPropertyを呼び出す方法に挿入しました。図形のカスタムプロパティに値を挿入するために何をする必要があるかを誰かが理解するのを手伝ってもらえますか?

これが私がコードを呼び出す方法です(テスト目的で私は自分で文字列を挿入しました):

  string keyword = "Manufacturer";
  string manuValue = "\"Dell\"";

  string three = SettingACustomProperty.SetCustomPropertyFormula(visioStarShape, keyword, manuValue);
4

2 に答える 2

2

Visioのカスタムプロパティには、名前と見なすことができる3つの異なる概念があります。

1つ目はラベルです。これは一般的にユーザーインターフェイスに表示されるものであり、シェイプシートのカスタムプロパティ行のラベルセルに保存されます。ラベルは通常、プログラムでカスタムプロパティにアクセスするために使用されません。

2番目は行名です。これは、シェイプシートのカスタムプロパティ行を見るときに表示される名前です。行内の他のセルの前に表示され、接頭辞として「Prop」が付けられます。これは、カスタムプロパティ行のNameプロパティを使用してオートマトンを介してアクセスされます。

最後の行名はユニバーサル名です。ユニバーサル名は主に、オブジェクトがローカライズされたときに名前が変更された後、つまり名前が変換された後でも、コードが特定のVisioオブジェクトを名前で検索できるようにするために存在します。ユニバーサル名には、カスタムプロパティ行のNameUプロパティを使用してアクセスできます。ユニバーサル名の詳細については、ユニバーサル名と構文を使用したVisioソリューションのローカライズを参照してください。

SetCustomPropertyFormulaを呼び出す場合、2番目の引数はユニバーサル名である必要があります。これは、内部的にSetCustomPropertyFormulaがget_CellsUを使用し、行のユニバーサル名を使用してカスタムプロパティセルを検索するためです。SetCustomPropertyFormulaを呼び出すときに、ユニバーサル名ではなく、ラベルまたは行名のいずれかを使用していると思われます。

ラベルを使用している場合は、ユニバーサル名の使用に切り替える必要があります。

この名前を使用している場合は、ユニバーサル名と一致しなくなります。これは、行の名前を変更するときに発生する可能性があります。ユニバーサル名を見つけて、コードで使用することができます。多くの場合、VBAイミディエイトウィンドウは、行のNameUプロパティを取得する簡単な方法です。または、インスタンス化されたシェイプまたはマスターを更新して、NameUプロパティをNameプロパティと等しく設定すると、この混乱を回避できます(行の名前を変更するまで)。

于 2012-04-26T05:34:20.040 に答える