1

GeckoFXとC#の組み合わせに2つの問題があります。

1.ボタンをクリックすると、アプリケーションはOpenFileDialog(C#コードで生成)を開いてimgタグのsrc属性を変更します。このimgのコンテキストメニューを使用して変更します。私の問題は、OpenFileDialogを開くボタンを1回クリックした後、img(コンテキストメニューなし)をクリックすると、OpenFileDialogが再び開きます。

2.この画像に新しい画像を選択すると、古いファイルを削除できません(C#コードを使用)これが私のコードです

[HTMLおよびJavascriptコード]

<script type="text/javascript">
$(document).ready(function(){
    $('.div_image).bind('contextmenu',function(){
        $('#contextmenu_image').css({top: e.pageY+'px',left: e.pageX+'px'}).show();
    });

});
</script>
<div class="div_image" style="position: absolute; top: '20px;left:'20px;"><img id="img123" class="image" src="" style="width: 100%;height: 100%;"/></div>
<ul class="contextmenu" id="contextmenu_image" style="width: 100px; display: none;">
    <li class="properties">Properties</li>
    <li class="del">Delete</li>
    <button id="choose_image">Choose image</button> 
</ul>

[C#コード]

private void ChooseImage()
    {
        if (geckoWebBrowser1.Document.ActiveElement.GetAttribute("id") == "choose_image")
        {

            OpenFileDialog open = new OpenFileDialog();
            open.Filter =
                "Image (*.BMP;*.JPG;*.GIF;*.PNG;*.JPEG)|*.BMP;*.JPG;*.GIF;*.PNG;*.JPEG|" +
                "All files (*.*)|*.*";
            open.Title = "Choose an image";

            DialogResult result = open.ShowDialog();
            if (result == System.Windows.Forms.DialogResult.OK)
            {
                string srcFile = open.FileName;
                string fileName = System.IO.Path.GetFileName(srcFile);
                string fileExtent = System.IO.Path.GetExtension(srcFile);
                string desDir = Application.StartupPath + "\\test\\images\\";
                Random r = new Random();
                string newFileName = "i_";
                for (int i = 1; i <= 10; i++)
                {
                    newFileName += Convert.ToString(r.Next(0, 9));
                }
                newFileName += fileExtent;
                System.IO.File.Copy(srcFile, desDir + newFileName);
                //Find old image
                string old_image = geckoWebBrowser1.Document.GetElementById("img123").GetAttribute("src");
                geckoWebBrowser1.Document.GetElementById("img123").SetAttribute("src", "images/" + newFileName);
                 if (old_image != "")

                    System.IO.File.Delete(desDir + old_image);//Delete old file,but unable



            }
        }
    }
 private void geckoWebBrowser1_DomClick(object sender, GeckoDomEventArgs e)
    {
        ChooseImage();
    }

英語が下手でごめんなさい

4

1 に答える 1

1

最初の問題については、クリックイベントの接続方法を変更することをお勧めします。

browser.OnBrowserClick + = new System.EventHandler(OnBrowserClick);

次に、何がクリックされたかを示す引数が表示されます。

private void OnBrowserClick(object sender, EventArgs e)
{
    var ge = e as GeckoDomEventArgs;
    if (ge.Target.ClassName =="choose_image")
    {
       //Handle the click...

2番目の問題については、おそらくブラウザがファイルを保持していると思いましたが、私の実験ではそうではありません。ファイルが実際にそこにあることを確認することをお勧めします。

var oldPath = Path.Combine(desDir);
if(File.Exists(oldPath))
{
    try
    {
        File.Delete(oldPath);
    }
    catch(Exception error)
    {
        //do something about not being able to delete the file yet
    }
}

geckofxでこれらの種類の多くを実行するオープンソースコードを確認したい場合は、私のBloomプロジェクト、特にEditingView.csとBrowser.csを参照してください。

于 2012-08-05T22:31:55.387 に答える