C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: マウスによるx軸の位置要素を取得


(過去ログ 135 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■79290 / inTopicNo.1)  マウスによるx軸の位置要素を取得
  
□投稿者/ 素人 (11回)-(2016/03/19(Sat) 18:09:56)

分類:[VB.NET/VB2005 以降] 

下記サンプルでは棒グラフの上でマウスをクリックしないことにはメッセージの表示がされません。
これをx軸さえ合っていればどこでクリックしても表示がされるようにしたのですがどうすれば良いのでしょうか?
よろしくお願いします。

Imports System.Windows.Forms.DataVisualization.Charting
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim dat As DataTable = New DataTable
        With dat.Columns
            .Add("件数", GetType(Integer))
            .Add("数量", GetType(Integer))
        End With

        For i = 1 To 10
            dat.Rows.Add(i, i * 10)
        Next

        Chart1.DataSource = dat
        Chart1.Series.Clear()
        Dim boug = Chart1.Series.Add("棒グラフ")
        With boug
            .ChartType = DataVisualization.Charting.SeriesChartType.Column
            .XValueMember = "件数"
            .YValueMembers = "数量"
            .IsVisibleInLegend = False
        End With
    End Sub

    'Chart1でマウスをクリック時の処理
    Private Sub Chart1_Click(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Chart1.Click
        '位置の要素を取得
        Dim htrResult As HitTestResult = Chart1.HitTest(e.X, e.Y)
        If htrResult.ChartElementType = ChartElementType.DataPoint Then
            MessageBox.Show(htrResult.PointIndex + 1)
        End If
    End Sub
End Class

引用返信 編集キー/
■79291 / inTopicNo.2)  Re[1]: マウスによるx軸の位置要素を取得
□投稿者/ daive (88回)-(2016/03/19(Sat) 19:01:43)
VB.NET でも、C# でも
Windows フォームアプリケーションは、
イベント駆動型プログラミングモデルです。
(グルグル廻しの、ポーリング型プログラミンとは違う程度の認識で、構いません。)
と、云う事は?大雑把に書くと、
何かをしたい、⇒イベントを発生させる。
何かを取得したい⇒イベントを捕まえる。

例えば、マウスイベントの学習方法例は、
今回は、マウスをクリックした時の状態を捕まえたいのですから、
準備として、テストコードで、確認します。
まずは、簡単な処から、新規にWindows フォームアプリケーションを作成します。
1.Form1 のプロパティウィンドで、
  稲妻マークをクリックして、イベントプロパティを視ます。
  スクロールバーをスクロールしていくと、
2.Mouse〜〜〜とイベントが出てきます。
  解らない間は、それらを総当りで調べて、
  自分の要求に合うイベントを見つけます。
3.各イベントの発火条件がどの様になっているか、確認するために、検証コードを書きます。
  調べるた事を元に、各イベントの発火条件での、コードを書きます。
  どの様な時に、どの様なイベントが発生するか、動作を検証します。
4.次に、簡単なコントロールを、Form1 へ配置して、動作を確認します。
  配置したコントロール上と、コントロール外での、マウスイベントの発火状態を確認します。
  さらに〜〜〜(省略)
5.さらに、チャートコントロールを配置して、ダミーデータを表示させて、動作を確認します。
  配置したコントロール上と、コントロール外での、マウスイベントの発火状態を確認します。
  チャートコントロール上と、コントロール外での、マウスイベントの発火状態を確認します。
  さらに〜〜〜(省略)
6.マウスイベントの概要、内容が理解できたら、掲示のコードの方を修正します。
という感じで、一つ一つ、テストをしながら確認してみてください。
1〜3は、案外簡単な事がわかります。
ここでは、わざと、4、5、6は、省略してあります。
それらについては、御自身の学習課題です。

引用返信 編集キー/
■79294 / inTopicNo.3)  Re[2]: マウスによるx軸の位置要素を取得
□投稿者/ 素人 (12回)-(2016/03/20(Sun) 08:25:21)
No79291 (daive さん) に返信
ありがとうございます。
現時点では見て習う。
教えて頂いたサンプルを解析し学習するレベルです。
よろしくお願いします。
引用返信 編集キー/
■79295 / inTopicNo.4)  Re[3]: マウスによるx軸の位置要素を取得
□投稿者/ daive (89回)-(2016/03/20(Sun) 10:04:19)
2016/03/20(Sun) 10:16:10 編集(投稿者)

上記の書込みは、VB.NET の基礎学習が終わっていて、使っている方にとっては、簡単な事なのですけど?
イベント機能を理解するために、イベントの動きを確認することは、必要な事です。
「対象の理解、実現に、調査、観察、確認(=やってみる)は、基礎。」です。

自習サイト例
Visual Basic 中学校
http://homepage1.nifty.com/rucio/main/main.htm
ここの、準備講座〜中級講座 を一通り学習してください。
理解の速い方、素養のある方で、1週間程度、
毎日コツコツやっても、1か月〜数か月程度で、学習可能です。
⇒1か月やって、何も理解出来ない方は、
 プログラミングの基礎学習以前の、下地(学習するとは?)ができていません。

辞書的な書籍は1冊はあると、役立ちます。
Visual Basic 2013逆引き大全 555の極意
項目数が多いので、検索ワード用の辞書として使用します。

VB.NETの入門サイト、検索ワード例
VB.NET 入門 : https://www.google.co.jp/search?hl=ja&q=VB.NET+%E5%85%A5%E9%96%80&lr=lang_ja&gws_rd=ssl

ひたすら、ズバリの回答や、目的のコードのみ得たい人は、
知恵袋や、答えて〜のような所が、幸せな行先です。

脳が汗を書くほど努力しないと、手が無意識に動く位努力しないと、
プログラミングなんて身に付きません。
という方と、
そんな事しなくても、楽しいからいつの間にか身に付いた
という方や、
(私は、こっち、なので、楽しい事をなぜ、端折るのか理解できないです。
 知らない事を知るのは、私にとって、楽しい事です。)



引用返信 編集キー/
■79296 / inTopicNo.5)  Re[3]: マウスによるx軸の位置要素を取得
□投稿者/ WebSurfer (874回)-(2016/03/20(Sun) 10:34:35)
No79294 (素人 さん) に返信

以前、有用なサンプルを入手できるという話しをしませんでしたっけ?

Chart Samples
http://surferonwww.info/BlogEngine/post/2016/02/14/chart-samples.aspx

もしサンプルをお持ちでなければ入手してそれを見ることができる環境を作る
ことをお勧めします。

> 現時点では見て習う。

↑ その役には立つと思いますので。
引用返信 編集キー/
■79297 / inTopicNo.6)  Re[3]: マウスによるx軸の位置要素を取得
□投稿者/ 素人 (13回)-(2016/03/20(Sun) 13:02:34)
2016/03/20(Sun) 13:05:12 編集(投稿者)

daiveさん
WebSurferさん

ありがとうございます。
おっしゃることはよく分かるのですが、普段はまったく違う仕事をしてますしVB自体に触れるのも必要に迫られた時くらい。
ましてや知りたいのはこの膨大な中でのごく一部。
例えば、道を尋ねた時にこれで調べなさいと地図を渡されるより、手書きでもいいのでここをこう行きなさいと個々の事例に対して具体的に教えて頂けた方が有り難いのです。
引用返信 編集キー/
■79299 / inTopicNo.7)  Re[4]: マウスによるx軸の位置要素を取得
□投稿者/ WebSurfer (875回)-(2016/03/20(Sun) 14:19:55)
No79297 (素人 さん) に返信

> 例えば、道を尋ねた時にこれで調べなさいと地図を渡されるより、手書きでもいいので
> ここをこう行きなさいと個々の事例に対して具体的に教えて頂けた方が有り難いのです。

その要望に答えるには、あなたの最初の書き込みのコードを読んで理解して、あなたの
やりたいことと照らし合わせて、やりたいことを実現するのはどこをどう直せば良いか
ということを考える必要があります。

それを考えるのは回答者にはかなり負担が大きいことで(単純な FAQ 的な話ならとも
かく、そうではなさそうなので)、赤の他人の第三者にそれをやってもらえると期待す
るのはどうなんでしょう。

もちろんそれをやってくれる親切な人もいますので、それを期待して待つ手もあるかも
しれませんが・・・

でも、待っている間にでも自助努力をされてはいかがでしょう?

私が紹介したサンプルを見て、質問者さんのやりたいことがその中に見つかれば、サン
プルにはコードも書いてあるので、それを参考に自分でやってみた方が解決が早いかも
しれませんし。

引用返信 編集キー/
■79300 / inTopicNo.8)  Re[5]: マウスによるx軸の位置要素を取得
□投稿者/ 素人 (14回)-(2016/03/20(Sun) 15:55:09)
No79299 (WebSurfer さん) に返信

ありがとうございます。

教えて頂いたサイトはC#のような気もしますが、いずれにしても待つことにしたいと思います。


引用返信 編集キー/
■79550 / inTopicNo.9)  Re[6]: マウスによるx軸の位置要素を取得
□投稿者/ Jitta (191回)-(2016/04/13(Wed) 21:33:27)
> 普段はまったく違う仕事をしてますしVB自体に触れるのも必要に迫られた時くらい。

 もともと、Visual Basic という「製品」は、そういう人をターゲットとして開発されました。
ところが、コンピュータのことをよく知らなくてもアプリケーションが作れる、ということから、ソフトウェア開発者も使うようになりました。
そして、ソフトウェア開発者が使うようになってから、ソフトウェア開発者向けに修正がされました。
今では、C# と共通の基盤の上に構築された「言語」のひとつであるため、昔の Visual Basic という製品とは異なっているといっても良いでしょう。
つまり、「Visual Basic」という名前は同じだけれど、VB6.0(というより、3とか4)までと、Visual Studio 2002 以降の VB.NET は全く違うものである、ということです。
今の Visual Basic は、人が入力するコードを、コンピュータがどの様に理解するかということをある程度知って、コードを書いてやる必要があります。

> これをx軸さえ合っていればどこでクリックしても表示がされるようにしたのですがどうすれば良いのでしょうか?

 この部分に対応するコードは、次のようになっています。
> Private Sub Chart1_Click(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Chart1.Click
>   '位置の要素を取得
>   Dim htrResult As HitTestResult = Chart1.HitTest(e.X, e.Y)
>   If htrResult.ChartElementType = ChartElementType.DataPoint Then
>     MessageBox.Show(htrResult.PointIndex + 1)
>   End If
> End Sub

 Chart.HitTest メソッドで、Chart1 をクリックした座標 (e.X, e.Y) にあるかどうかをテストしています。
ここで、「X軸さえ」ということですから、「クリックで指定された X 軸と、何でもいい Y 軸」ということです。
「何でもいい」を調べる方法を考えます。
一番楽なのは、HitTest メソッドに X か Y だけを検査するものがあること、です。
次に楽なのは、描画域 (x, y) をグラフの値にしてくれる関数があること、です。
どちらもありません。
ではどうしましょうか。
今、どうしていますか?適当にクリックして、メッセージボックスが出なかったら、マウスを上下に動かして、もう一度クリックするのではないですか?
では、それを自動化してみましょう。
「e.X と、グラフエリアの上から下まで e.Y を変化させてテストすればいい」ということになります。

未検証&私はC系使い
Private Sub Chart1_Click(略) Handles Char1.Click
  For y As Integer = 0 To Chart1.Height
    ' Y 座標値を、0 からチャートの高さの間で検査する。
    If Char1.HitTest(e.X, y) = ChartElementType.DataPoint Then
      MessageBox.Show(htrResult.PointIndex + 1)
      Exit For
    End If
  Next
End Sub

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -