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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■7919  Re[2]: 【GridView】削除した行の値の取得
□投稿者/ 松田 -(2007/09/19(Wed) 16:24:27)
    No7916 (とりこびと さん) に返信
    > こんにちは。とりこびとです。
    >
    > ちょっと確認はできていないのですが、
    >
    > GridViewDeletedEventArgs クラス
    > http://msdn2.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridviewdeletedeventargs.aspx
    >
    > から削除された列の情報が取得できませんか?



    とりこびとさん、ありがとうございます。

    せっかく教えていただいたURLなのですが、理解に至りませんでした。

    Valuesプロパティで値を取得するということですよね・・・

記事No.7915 のレス /過去ログ19より / 関連記事表示
削除チェック/

■27415  Re[4]: MDI親フレームの子フレームから子フレーム作成について
□投稿者/ tamaboyo -(2008/11/05(Wed) 15:31:15)
    No27407 (やじゅ さん) に返信

    boyotamaです。
    ありがとうございます。

    > ■No27402 (tamaboyo さん) に返信
    >>元々、VBのコードでは、フレームAとBに記号を付けておき、Aを閉じるときにMDIの子フレームをすべてチェックして、
    >>同じ記号を持ったフレームを閉じるようにしていました。
    >>
    >>同じような考え方でしょうか?
    >
    > 同じ考えですね。
    > プロパティを使った方がオブジェクト指向的にいいかなと。

    申し訳ないのですが、「プロパティの追加」の意味が理解できていないのですが、
    C#では、フレームのプロパティに項目の追加ができるのでしょうか?
    それとも、ソースにPublicな変数を宣言し、外から見れるようにすることなのでしょうか?
    #VBでは、非表示のラベルコントロールに設定した文字列で判定していました。

    宜しくお願いします。
記事No.27388 のレス /過去ログ50より / 関連記事表示
削除チェック/

■49753  Re[1]: オブジェクト指向の設計に関する質問
□投稿者/ れい -(2010/05/15(Sat) 04:51:14)
    No49746 (える さん) に返信
    > まず考えたのが顧客の情報を保持する顧客クラスを作ると言うことです。
    > この顧客クラスを作る際に、顧客クラスのメンバ変数にフォームに入力された
    > 顧客名や住所などを格納したいわけですが、
    > この際にメンバ変数へ情報を格納する手法として最も自然なやり方をご教示下さい。

    自然というのが…バックグラウンド次第で如何様にもなり得るので、
    「私にとって」自然というのしか言えませんが。

    > 顧客クラス側から入力フォームの情報を取得するという方法を考えました。
    > 例) cu = new Customer(this);

    これだとGUIと顧客が密接に関連してしまいますよね。
    GUIの変更のたびにCustomerクラスを確認する必要があります。
    それは一般的に見て保守性が高いとは言えないように思います。
    でも、必ずフォームと一体であるならむしろ変更がすくなくなります。

    > もう一つの方法として、全ての情報を引数で一つずつ渡すと言うことも考えました。
    > 例) cu = new Customer(textBoxName.Text, textBoxTel.Text, textBoxAddress.Text);

    これは項目が多いときに長くてつらい。
    増えたときに困ります。
    ですが、ちゃっぴさんの言うようにReadOnlyにするなら、これが一番わかりやすい。

    No49748 (やじゅ さん) に返信
    > 一般的には
    > cu = new Customer();
    > cu.CustmerName = textBoxName.Text;
    > cu.Tel = textBoxTel.Text;
    > cu.Address = textBoxAddress.Text;

    項目変更時にズラっと並んでいるのひとつずつなおして確認する、というような工程は
    ある種の人以外は工程数に比例したミスが生じますよね。
    必須なフィールドを忘れてしまう場合もあるかも。
    でも、わかりやすくはあります。


    今後さらに拡張を考えるなら、「顧客」がデータベースに入ることも念頭にクラス化する必要があるかもしれません。
    データベースとの間でのマッピングの際の制約、開発環境のサポート、
    自分の知識・技術力の問題など、いろいろ問題が出てきます。

    考えるべきことが多すぎて、答えられませんし、そもそも把握しきれません。


    プログラミング言語は自由度高く作られていますから、いろいろ手があります。
    それらをすべて検討して、いいところ悪いところを検討し、
    その中から最善のものを選ぶのはかなりつらい作業です。

    えるさんの示した内容からでは誰にも最善の手はわかりませんし、
    それを検証する手もありません。
    オブジェクト指向的に一般的なのも、状況次第です。

    > やみくもにフォームのイベントハンドラやコード部分に
    > 処理をごりごり書いて完成させました。

    ごりごりやって、完成したわけですね。
    完成ということは、動いていると。

    > ですがこれでは保守性がいまいち高くないような気がします。
    > そこでオブジェクト指向を活用してコードを見直したいと思っています。

    いますぐにコードを治す必要に迫られているわけではないのですね。
    ということは、将来の発生するかわからない保守を念頭に、修正をいれようとしているわけですね。

    でしたら、「何もしない」をオススメします。

    保守が発生した時に、保守する上で障害となる、なった部分を考え、
    それが改善されるように少しずつ治しましょう。

    今完成しているなら、もう保守のことを考えるには遅すぎます。

    保守のことを考えずに作ったのであれば、保守の経験が足りません。
    私の持つ一番大切な保守の経験は「保守の事を考えずに作ると大変なことになる」というものです。

    保守の経験が足りないのですから、保守性を考慮して変更してもうまくいくとは思えません。

    もし経験を積んでも大切さがわからないのであれば、それは稀有な才能があることになります。
    その場合も保守性のために手を入れる必要はありません。
記事No.49746 のレス /過去ログ84より / 関連記事表示
削除チェック/

■69239  Re[1]: Type.GetProperties時の構造体判別
□投稿者/ 魔界の仮面弁士 -(2013/12/10(Tue) 18:19:37)
    No69236 (DD. さん) に返信
    > 環境:VS2008+.Net3.5 Win7
    言語は何でも良いのですね?
    とりあえず C# で回答します。


    > 例えばLocationプロパティはPoint構造体かと思いますが、
    > ToString時と同じような出力のされ方となります。({X=225,Y=225})
    どのように出力しているのか分かりませんが、GetValue の戻り値は、
    この場合は「Point 構造体を格納した object 型」となる筈ですよ。


    > IsClassはもちろんfalse、IsValueTypeでは他の値型との判別がつかず、、、
    「他の値型」とは、何を指していますか?

    自分の認識では、少なくとも C# で値型といえば
    「構造体」と「列挙体」だけという認識です。
    http://msdn.microsoft.com/ja-jp/library/s1ax56ch%28vs.90%29.aspx



    > 構造体であるか判別する術はあるのでしょうか?
    たとえば DialogResult は 列挙型ですが、これは IsEnum で判定可能ですよね。

    int は Int32構造体なので OK でしょう。
    int? も Nullable<int> 構造体なので OK。
    両者を区別したいなら「t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)」。

    プリミティブ型かどうかなら、IsPrimitive プロパティです。


    # ちなみに、DateTime 型は VB では組み込み型ですが、
    # VB で GetType(Date).IsPrimitive と書いても False を返します。
記事No.69236 のレス /過去ログ118より / 関連記事表示
削除チェック/

■86667  Re[1]: コントロール単位でスクロールさせたい
□投稿者/ 魔界の仮面弁士 -(2018/02/27(Tue) 10:09:03)
    No86661 (大阪 さん) に返信
    > FlowLayoutPanel(AutoScroll = False)内の垂直方向に配置されたコントロールを
    AutoScroll = True では駄目なのですか?
    自動的にスクロールバーが出るので、追加のコーディングが不要になりそうですが。

    それと、キーボード(ScrollUp/ScrollDown/上矢印/下矢印/Tab/Shift+Tab)による操作や、
    フォームのリサイズ(高さ変更)への追従、スクロール領域外のコントロールに
    フォーカスがあることを許容するかどうかなども検討しておく必要がありそうです。


    > 具体的には以下のコードのValueChangedイベントで_VScrollBar.Valueと同じインデックス
    > のボタンをTop位置にスクロールさせたいです。
    その仕様だと、最後のボタンを表示しきれない気もしますが、
    それはとりあえず後で考えるとして。


    Option Strict On
    Public Class Form1
      Private _max As Integer = 100
      Private FlowLayoutPanel1 As New FlowLayoutPanel() With {.AutoScroll = False, .Dock = DockStyle.Fill, .WrapContents = False, .FlowDirection = FlowDirection.TopDown}
      Private WithEvents _VScrollBar As New VScrollBar() With {.Maximum = _max, .Minimum = 0, .LargeChange = 10, .SmallChange = 1, .Value = 0, .Dock = DockStyle.Right}
      Private Buttons As New List(Of Button)()
      Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        FlowLayoutPanel1.SuspendLayout()
        For i = 0 To _max
          Dim btn As New Button() With {.Text = i.ToString()}
          btn.Height = 50
          Buttons.Add(btn)
          FlowLayoutPanel1.Controls.Add(btn)
        Next
        Controls.Add(FlowLayoutPanel1)
        FlowLayoutPanel1.ResumeLayout(False)
        Controls.Add(_VScrollBar)
        Text = "0"
      End Sub

      Private Sub _VScrollBar_ValueChanged(sender As Object, e As System.EventArgs) Handles _VScrollBar.ValueChanged
        FlowLayoutPanel1.SuspendLayout()
        For i = _max To 0 Step -1
          Buttons(i).Visible = i >= _VScrollBar.Value
        Next
        FlowLayoutPanel1.ResumeLayout(True)
        Me.Text = _VScrollBar.Value.ToString()
      End Sub
    End Class


    上記は、Visible プロパティを切り替えることで、スクロールされたボタンを
    非表示にする方法で実装しています。

    フォーカスが失われることを嫌うなら、マイナス座標に別のコンテナを用意しておき、
    ボタンをそこに移動させるという手もありそうです。
記事No.86661 のレス /過去ログ148より / 関連記事表示
削除チェック/

■86672  Re[2]: コントロール単位でスクロールさせたい
□投稿者/ 大阪 -(2018/02/27(Tue) 12:14:31)
    No86667 (魔界の仮面弁士 さん) に返信
    ありがとうございます。
    提示頂いたコードで期待通りの動作をしました。
    
    > AutoScroll = True では駄目なのですか?
    特に駄目と云う事ではないですけど、コードから動的にコントロールを追加、削除を
    繰り返すような実装になっている場合、自動でスクロールバーが出たり消えたりする為、
    スクロールバーの有無でコントロールの幅が変わるので(縦スクロールバーの場合)、
    それが嫌なケースもあります。
    特に今回、何かアプリを作成しているわけではないので、具体的にといわれると困りますが... 
    
    
    > それと、キーボード(ScrollUp/ScrollDown/上矢印/下矢印/Tab/Shift+Tab)による操作や、
    マウスホイールと上下キーには以下のコードで対応しました。
    
    > フォームのリサイズ(高さ変更)への追従、
    フォームのリサイズ(高さ変更)への追従はちょっと意味がわかりませんでした。
    リサイズ時に問題がでそうな事項があれば、教えてください。
    
    > スクロール領域外のコントロールにフォーカスがあることを許容するかどうかなども検討しておく必要がありそうです。
    これはケースバイケースで対応します。
    
    
    > その仕様だと、最後のボタンを表示しきれない気もしますが、
    > それはとりあえず後で考えるとして。
    これは、質問した後、気付きました。
    これについては、VScrollBarのMaximumプロパティを変更する事で、対応しました。
    
    もし何か、お気づきの点があれば、ご指摘ください。
    
    Option Strict On
    Public Class Form1
        Private _max As Integer = 100
        Private WithEvents FlowLayoutPanel1 As New FlowLayoutPanel() With {.AutoScroll = False, .Dock = DockStyle.Fill, .WrapContents = False, .FlowDirection = FlowDirection.TopDown}
        Private WithEvents _VScrollBar As New VScrollBar() With {.Maximum = _max, .Minimum = 0, .LargeChange = 10, .SmallChange = 1, .Value = 0, .Dock = DockStyle.Right}
        Private Buttons As New List(Of Button)()
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            FlowLayoutPanel1.SuspendLayout()
            For i = 0 To _max
                Dim btn As New Button() With {.Text = i.ToString()}
                btn.Height = 50
                AddHandler btn.PreviewKeyDown, AddressOf btn_PreviewKeyDown
                AddHandler btn.MouseWheel, AddressOf btn_MouseWheel
                Buttons.Add(btn)
                FlowLayoutPanel1.Controls.Add(btn)
            Next
            Controls.Add(FlowLayoutPanel1)
            FlowLayoutPanel1.ResumeLayout(False)
            Controls.Add(_VScrollBar)
            Text = "0"
            '最後のボタンを表示しきれない対応
            With _VScrollBar
                .Maximum = .Maximum + .LargeChange - 1
            End With
    
        End Sub
        Private Sub _VScrollBar_ValueChanged(sender As Object, e As System.EventArgs) Handles _VScrollBar.ValueChanged
            FlowLayoutPanel1.SuspendLayout()
            For i = _max To 0 Step -1
                Buttons(i).Visible = i >= _VScrollBar.Value
            Next
            FlowLayoutPanel1.ResumeLayout(True)
            Me.Text = _VScrollBar.Value.ToString()
        End Sub
    
        Private Sub btn_PreviewKeyDown(sender As Object, e As System.Windows.Forms.PreviewKeyDownEventArgs)
            Select Case e.KeyCode
                Case Keys.Up
                    _VScrollBar.Value = If(_VScrollBar.Value - 1 < 0, 0, _VScrollBar.Value - 1)
                Case Keys.Down
                    _VScrollBar.Value = If(_VScrollBar.Value + 1 > _max, _max, _VScrollBar.Value + 1)
            End Select
        End Sub
    
        Private Sub btn_MouseWheel(sender As Object, e As System.Windows.Forms.MouseEventArgs)
            Select Case Math.Sign(e.Delta)
                Case 1
                    _VScrollBar.Value = If(_VScrollBar.Value - 1 < 0, 0, _VScrollBar.Value - 1)
                Case -1
                    _VScrollBar.Value = If(_VScrollBar.Value + 1 > _max, _max, _VScrollBar.Value + 1)
            End Select
        End Sub
    End Class
    
    
記事No.86661 のレス /過去ログ148より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -