none
ピクチャボックスのスクロールバーについて RRS feed

  • 質問

  • こんにちは!

     

    今 C# ExpressEdition にて画像ビューワを作っています。

    独自フォーマットの画像を4096*4096などの比較的大きな画像を表示するためのものです。

     

    ピクセル単位の確認を行うため、ズーム機能が必須で 16倍くらいズームすると

    例えば 幅が2048(pixel)*16(倍)=32768(pixel)となり、ピクチャボックスで指定できるサイズの限界を超えてしまいます。

    (32767では大丈夫なようなので、ピクチャボックスのコントロールサイズは2バイト長のようです。)

     

    そこで画像を部分的に切り出してDrawImage()を行うようにしたのですが、

    これではクライアントサイズだけしか使用しないため、ピクチャボックスのスクロールバーが使えません。

    そこで自前でスクロールバーを表示したり消したりしなくては行けず、困っています。

     

    スクロールバーを表示するとクライアントサイズがスクロールバー分減るため、

    実装が非常に複雑になってしまいました。

     

    なんとかピクチャボックスのスクロールバーを使えないものかと困っています。

    グラフィックツールなどを作る場合には、ズームが必要になると思うので、もっと上手い解決方法があると思うのですが、今の自分にこれがいっぱいいっぱいでして…

    そこで、ご教授して頂きたく書き込みをしました。

     

    よろしくおねがいします。

     

     

    2007年6月10日 9:03

回答

  • 無理じゃない?

    スクロールバーの実装ってそんなに大変じゃないでしょう?

    グラフィックツールでPictureBoxなんか使わないと思います。(^^

    2007年6月10日 10:37
  • 諸農です。

     

    .NET Framework クラス ライブラリ 

    ScrollBar クラス 

    http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.scrollbar(VS.80).aspx

    にあるサンプルコードではPictureBoxにScrollBarコントロール(HとVですが)を後付にして管理しているようですので参考になるとおもいます。

    2007年6月10日 10:37
  • 逆に、ピクチャボックスのスクロールバーを表示させないようにして、全て自前のスクロールバーから対象部分のみを描画するようにした方がやりやすいかもしれませんね。

    2007年6月11日 1:34
  • やはりピクチャボックスに頼ろうとせず自分で制御すべきなんですね。

    勉強になりました。

     

    ちなみに自分が実装していたのは、諸農さんが教えてくれた

     

    >.NET Framework クラス ライブラリ 

    >ScrollBar クラス 

    >http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.scrollbar(VS.80).aspx

     

    とほぼ同じことをやっていました。

    構成が少し違うくらいで実質一緒でした。

     

    正直、スクロールバーが現れた時に、スクロールバー自身に現れた分だけスクロール量を増やさなければならないというのが、

    理屈は分かるもののどうにもスマートじゃないなと、えらく悩んでしまいました。

     

    とりあえず実装できたからいいじゃないか、と割り切れればよかったのでしょうが…

     

    みなさんありがとうございました。

    2007年6月12日 1:15

すべての返信

  • 無理じゃない?

    スクロールバーの実装ってそんなに大変じゃないでしょう?

    グラフィックツールでPictureBoxなんか使わないと思います。(^^

    2007年6月10日 10:37
  • 諸農です。

     

    .NET Framework クラス ライブラリ 

    ScrollBar クラス 

    http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.scrollbar(VS.80).aspx

    にあるサンプルコードではPictureBoxにScrollBarコントロール(HとVですが)を後付にして管理しているようですので参考になるとおもいます。

    2007年6月10日 10:37
  • 逆に、ピクチャボックスのスクロールバーを表示させないようにして、全て自前のスクロールバーから対象部分のみを描画するようにした方がやりやすいかもしれませんね。

    2007年6月11日 1:34
  • やはりピクチャボックスに頼ろうとせず自分で制御すべきなんですね。

    勉強になりました。

     

    ちなみに自分が実装していたのは、諸農さんが教えてくれた

     

    >.NET Framework クラス ライブラリ 

    >ScrollBar クラス 

    >http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.scrollbar(VS.80).aspx

     

    とほぼ同じことをやっていました。

    構成が少し違うくらいで実質一緒でした。

     

    正直、スクロールバーが現れた時に、スクロールバー自身に現れた分だけスクロール量を増やさなければならないというのが、

    理屈は分かるもののどうにもスマートじゃないなと、えらく悩んでしまいました。

     

    とりあえず実装できたからいいじゃないか、と割り切れればよかったのでしょうが…

     

    みなさんありがとうございました。

    2007年6月12日 1:15
  • こんにちは。

     

    先にPanelを配置して、AutoScrollプロパティをTrueにしてみたらどうですか?

    そのうえにPictureBoxを配置すればクライアント領域は狭くはならないのではないでしょうか。

    的外れであればごめんなさい。

    2008年12月24日 7:07