0

C#に関しては、少し問題があります。

ユーザーが指定した画像をダウンロードして、フォームの背景を動的に更新しようとしています。

画像をダウンロード (およびフォームを更新) するコードは次のようになります。

 public bool getImgFromWeb(string url)
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(url, UriKind.Absolute));
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            //if response is okay, and it's an image
            //sometimes 404 will be okay, but will redirect to website.
            if ((response.StatusCode == HttpStatusCode.OK) &&
                (response.ContentType.StartsWith("image", StringComparison.OrdinalIgnoreCase)))
            {
                Bitmap tempImg = new Bitmap(response.GetResponseStream());
                this.BackgroundImage = tempImg; //this line does nothing.
                this.Invalidate(); //to force the window to redraw
            }
            else
            {
                MessageBox.Show("Sorry, the image your are trying to download does not exist. Please re-enter the image URL.");
                return false;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Sorry, an error: " + ex.Message + " occurred.");
            return false;

        }

フォームに更新された背景が表示されない理由について何か提案はありますか?

ありがとう。

4

1 に答える 1

1

私はあなたのシナリオを複製し、 this.Invalidate() を this.Refresh() に置き換えましたが、うまくいきました。これは Visual Studio 2012 にあります。

private void SetImageAsBackground(string uri)
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode == HttpStatusCode.OK && response.ContentType.StartsWith("image", StringComparison.OrdinalIgnoreCase))
            {
                Bitmap temp = new Bitmap(response.GetResponseStream());
                this.BackgroundImage = temp;
                this.Refresh();
            }
            else 
            {
                MessageBox.Show("This isn't an image!");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(string.Format("Exception: {0}", ex));                
        }
    }
于 2013-01-19T12:58:23.057 に答える