あなたの言語があなたのプロジェクトで使用されているかどうか分かりませんが、私はあなたの言語に翻訳することができますね。私はC#で、ここでの例を紹介します:あなたはRibbonXML定義で、いわゆるコールバック関数を実装する必要が
まず:
<button id="buttonSomething" label="Content" size="large" getVisible="EnableControl"/>
次のステップは、コールバック関数を実装することです:
public bool EnableControl(IRibbonControl control)
{
return true; // visible ... false = invisible
}
VSTO getVisibleコールバックをトリガーし、戻り値に応じて、可視状態を有効または無効にします(そうでない場合はコールバックがトリガされない、RibbonXMLから任意の可視性を除去することを忘れないでください)
リボンデザイナーの場合は、クリック署名が正しいことを確認する必要があります。これを行うには、リボンデザイナーのボタンをダブルクリックします。これにより、Clickメソッドが作成されます。
リボンデザイナーでリボンを作成し、2つのボタンを追加しました。最初のボタンをダブルクリックして、以下のような空のメソッドを取得し、コードを追加しました。
private void button1_Click(object sender, RibbonControlEventArgs e)
{
// Toggle button visibility and make sure the button is enabled
// Visible (obviously) makes it visible, while Enabled is grayed if
// false. You don't need this it is Enabled by default, so just for
// demo purposes
button2.Visible = !button2.Visible;
button2.Enabled = button2.Visible;
// Force Ribbon Invalidate ...
this.RibbonUI.Invalidate();
// Long running proces
}
これは完全に機能していますので、それがうまくいかない場合は、コーディングの詳細をご記入ください。
こんにちは...私もC#を使用しています...しかし、私は、コールバックを追加する場所を見つけることができません。私はRibbonXMLを持っていません....私はリボンデザイナーを使用しました。コールバックをそのように追加するにはどうすればよいですか? – jstuardo
リボンデザイナ(柔軟性はほとんどありませんが、ほとんどのソリューションで機能します)では、メソッドの正しい「署名」を作成しない限り、さらに簡単です。私の編集された答えを参照してください –
もちろんそれはあなたのために働く。私はあなたのコードを使用してもそれも動作します。問題はこれです:ボタンを表示させた直後、私は長期的なプロセスを開始します。そのプロセスは新しいシートをデータで満たします。ユーザーがそのプロセスをキャンセルできるようにしておきたいので、プロセスを開始する前に[キャンセル]ボタンを表示する必要があります。しかし、私がApplication.DoEvents、button.Invalidateを使用してさらに多くの試みを行っても、現在のメソッドが返されたときにボタンが最後に表示されます。不思議なことは、行がどのように埋められているかを見ることができるので、Excelはプロセス中にロックされていないということです。 – jstuardo