3

ツールチップを動的に表示する良い方法を調べたところ、まさに必要としていたOverLibWrapperが見つかりました。

カスタム構成セクションに保存されているすべてのツールチップ データがあり、ツールチップは実行中にそれぞれのコントロールにバインドされPage_Loadます。

私は簡単なテストを行い、うまくいきました。OverLibWrapper がマスターページで機能しないことに気付いたときに、問題が発生しました。私たちの Web サイトではかなりの数のマスターページを使用しているため、それらを削除することはできません。

私が使用できる OverLibWrapper のようなものがあるかどうか疑問に思っていました。

編集:

私が探しているのは、ASP.NET のツールチップ プロパティがあまりきれいではないため、マウスオーバー時に見栄えの良いツールチップを動的な方法で表示するコントロールです (生のテキストを表示しているだけなので、派手なことは何もありません)。そして表示されるまでに時間がかかります。たとえば、メッセージのコレクションがあるとします。

class Message
{
    string ctrlid, msgtodisplay;
}

ページが読み込まれると、次のようになります。

TooltipManager manager;
foreach(var m in messages)
{
    Tooltip tltp=new Tooltip;
    m.ControlID=m.ctrlid;
    m.Message=m.msgtodisplay;
    manager.AddTooltip(tltp);
}

つまり、基本的に Tooltip と TooltipManager の機能を提供するものです。

4

2 に答える 2

1

これを見てください:

メモツールチップ

これで必要なことはできると思います。

自分で書くことを考えたことはありますか?時々、他の人がそこにあるものが私のニーズにまったく合わないことに気付くことがあります。

于 2010-10-20T08:15:15.463 に答える
1

さて、私は最終的に私の問題を解決しました:

この関数を使用してコントロールを見つけました(マスターページで動作します):

public static Control FindControlRecursive(Control root, string id)
{
    if (id == string.Empty)
        return null;

    if (root.ID == id)
        return root;

    foreach (Control c in root.Controls)
    {
        Control t = FindControlRecursive(c, id);
        if (t != null)
            return t;
    }
    return null;
}

そして、この方法:

public static void load(Page page, string pageFileName)
{
    foreach (ConfiguracionElem elem in Configuracion.GetConfig(pageFileName).Tooltips)
    {
        WebControl ctrl = (WebControl)FindControlRecursive(page, elem.controlid);
        if (ctrl == null)
            throw new ControlNotFoundException("There's no control'"+elem.controlid+"'")
        else
        {
            ctrl.Attributes.Add("onmouseover","return overlib('"+elem.message+"');");
            ctrl.Attributes.Add("onmouseout","return nd();");
        }
    }
}

Overlib ライブラリを手動でスクリプト フォルダーに追加し、カスタム構成セクション (ツールチップ データが格納されている場所) を繰り返し処理して、javascript 属性を動的に追加しました。

于 2010-12-13T23:32:17.080 に答える