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

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

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

全過去ログを検索

<< 0 >>
■25512  Re[3]: 正規表現で、且つの記述方法
□投稿者/ Ognac -(2008/09/20(Sat) 22:53:17)
    それじゃ、"あいうかき"がひっかからないのでは、
    それも、引っかけるなら、
    Dim pat As String = "(?=.*あい)(?=.*かき)"
    でどうでせう。
記事No.25499 のレス /過去ログ47より / 関連記事表示
削除チェック/

■55697  Re[5]: NumericUpDownコントロールの上下限チェック不具合
□投稿者/ ホエホエ -(2010/12/09(Thu) 16:20:57)
    みなさま、ご返信ありがとうございます。


    shuさん>
    私の方でも
    NumericUpDown1.Maximum = decimal.MaxValue;
    NumericUpDown1.Minimum = decimal.MinValue;

    で試してみましたがダメでした。

    魔界の仮面弁士さんが書かれている通り、NumericUpDownコントロールが
    HexadecimalをtrueにするとInt32の範囲しかダメなようです。

    バグではないにしてもせめてdecimalの範囲内ぐらいはきちんと
    動いて欲しいですねぇ。



    ふーさん>
    上記にもある通り、Maximumにdecimal.MaxValueを設定しても
    ダメでした。

    ちなみに「(decimal)0xFFFFFFFF」であったとしても
    Maximumにはウォッチで見ると「4294967295」が入ってたので
    問題ないようです。



    魔界の仮面弁士さん>
    貴重な情報ありがとうございます。やはりInt32までしかサポートしない
    仕様なんですね。

    サポートするように自信でSystem.Windows.Forms.UpDownBaseクラスの
    派生を作らないとダメなんでしょうかね。
記事No.55671 のレス /過去ログ93より / 関連記事表示
削除チェック/

■91879  Form、データテーブル、クラス構築の方法について
□投稿者/ TanuTanu -(2019/08/08(Thu) 10:20:13)
>

    分類:[.NET 全般] 

    いつもお世話になっております。

    わんくま同盟の皆様のお力をお借りプログラム勉強しているものです。
    見よう見まねで製作している為、動作はするが正しいコードかどうか怪しいです。
    何か無駄にメモリを使っている気がします・・・

    Form、データテーブル、各種クラスを使った構築は下記の通りです。

    改良すべき点がありましたらご教授をお願い致します。


    @Form1-DataSet1-DataTable1をデザイナーで製作
    ATEST1〜TEST5クラスを製作

    ■Form1のコード抜粋

    Dim TEST1 As New TEST1(Me)
    TEST1.Check()

    ■TEST1〜TEST5クラス

    Public Class TEST1

    'フォームの参照を保持する
    Public _Form1 As Form1

    Public TEST1データ As DataTable

    Public Sub New(frm As Form)

    _Form1 = CType(frm, Form1)

    TEST1データ = _Form1.DataSet1.TEST1データ

    End Sub

    メソッドは割愛

    End Class

    Public Class TEST2

    'フォームの参照を保持する
    Public _Form1 As Form1

    Public TEST2データ As DataTable

    Public Sub New(frm As Form)

    _Form1 = CType(frm, Form1)

    TEST2データ = _Form1.DataSet1.TEST2データ

    End Sub

    メソッドは割愛

    End Class

    TEST3移行は割愛
親記事 /過去ログ158より / 関連記事表示
削除チェック/

■91883  Re[1]: Form、データテーブル、クラス構築の方法について
□投稿者/ 魔界の仮面弁士 -(2019/08/08(Thu) 11:29:08)
    2019/08/08(Thu) 11:32:24 編集(投稿者)

    No91879 (TanuTanu さん) に返信
    > 何か無駄にメモリを使っている気がします・・・

    メモリの問題は別に考えましょう。


    それよりも、「カプセル化」がおろそかになっている点が気にかかります。

    Form 上に貼ったコントロールやコンポーネントは、
    C# では既定で private になるのですが、
    VB では Friend になりますね。
    (デザイン時に GenerateMember および Modifiers プロパティで変更できます)


    これらは Public なメンバーでないことを前提に設計しましょう。
    Public ではない以上、その Form 以外の場所から
    直接読み書きされることは避けるべきです。


    > Public Class TEST1
    >   'フォームの参照を保持する
    >   Public _Form1 As Form1

    Form1 が TEST1 のインスタンスを管理するのではなく、
    TEST1 が Form1 のインスタンスを管理する形なのですね?

    その場合、TEST1 のインスタンスをどこで管理するのかとか、
    そもとも TEST1 は何のために _Form1 への参照を必要としているのかといった
    設計上の「意図」が読めないのが気にかかりますが、それはさておき。


    固有の Form1 型を Public フィールドで参照させることは望ましくありません。
    それが "_" で始まるメンバー名であるなら尚の事です。

    今の実装だと、
     Dim objTEST1 As New TEST1(form1インスタンス)
     objTEST1._Form1 = Nothing
    のように、TEST1 の外部から任意のタイミングで
    それぞれの参照を張り替えることができてしまいますが、
    それは TEST1 側にとって都合が悪くありませんか?



    >   Public Sub New(frm As Form)
    >     _Form1 = CType(frm, Form1)

    この部分もアウト。
    コンストラクタ引数に Form2 のインスタンスを渡せてしまいますが、
    その場合、TEST1 インスタンスの生成時点で例外となりますよね。

    であればそもそも、Form1 以外は受け付けられないよう、
     Public Sub New(frm As Form1)
    にしておいた方が素直でしょう。

    それと、引数が Nothing であることを許容するかどうかも争点です。
    Nothing を受け入れないようにするならば、
     If frm Is Nothing Then Throw New ArgumentNullException(NameOf(frm))
    などの「ガード句」を設けておくことが望ましいです。


    >     TEST1データ = _Form1.DataSet1.TEST1データ
    この実装にも疑問。
    この DataTable を管理しているのは、Form1 なのでしょうか。それとも TEST1 なのでしょうか?

    これがたとえば、
     Me.CurrentTable = _Form1.DataSet1.TEST1データ
    などとなっていて、TEST1 内の別の処理で
     Me.CurrentTable = 別のDataTable
    などとなるようなパターンならまだ分からなくも無いのですが。


    ただそれにしても、TEST1 が「Form1 の DataSet1 フィールド」を
    読み書きすることには違和感があります。DataSet の管理は
    Form1 自身に任せるべきでしょうし、もしも TEST1 に一任させたいと
    思うのであれば、Form1 と TEST1 の二重管理にしない方が良いです。
    (依存性の高い密結合になるので、修正工数などが増大する)


    '【案1】Form1 の参照を、呼び出し元で差し替えられないようにする
    Public Class TEST1
      Public ReadOnly TanuTanuForm As New Form1()
      Public Sub New(f As Form1)
        Me.TanuTanuForm = f
      End Sub
    End Class


    '【案2】Form1 は TEST1 専用という位置づけにしてしまう(デザイナと相性が悪いのが難点)
    Public Class TEST1
      Private _Form1 As New Form1()
      Partial Private Class Form2
        Inherits Form
      End Class
    End Class


    '【案3】固有の Form1 型ではなく、汎用の Form 型を使う
    Public Class TEST1
      Public ReadOnly Property Owner As Form
      Public Sub New(owner As Form)
        _Owner = owner
      End Sub
    End Class

    '【案4】特定のインターフェイスのみを受け付けるようにする場合
    Public Class TEST1
      Private ReadOnly Foo As ITanuTanu
      Public Sub New(foo As ITanuTanu)
        Me.Foo = foo
      End Sub
    End Class
    Public Interface ITanuTanu
    End Interface
    Partial Public Class Form1
      Inherits Form
      Implements ITanuTanu
    End Class
    Partial Public Class Form2
      Implements ITanuTanu
      Inherits Form
    End Class
記事No.91879 のレス /過去ログ158より / 関連記事表示
削除チェック/

■91881  Re[1]: Form、データテーブル、クラス構築の方法について
□投稿者/ とっちゃん -(2019/08/08(Thu) 10:42:07)
    No91879 (TanuTanu さん) に返信
    > 改良すべき点がありましたらご教授をお願い致します。
    >
    ここに載ってるのだけだとすると。。。

    > Public Sub New(frm As Form)

    ここは、
    Public Sub New( frm As Form1 )
    でもよいと思いますよ。
    欲しいのは、Form1 だけで、Form2 とか Form3 とかが来ても困るんですよね?
    受け取りたいものを明示できるならできるだけ明示したほうが不具合になりにくいです。

    あとは、DataSetや、DataTable がどういう内容なのか?
    TEST1〜5 がそれに対して具体的に何をしているのか?
    というのがわからないと「改良」したほうが良いかどうかはわからないです。
記事No.91879 のレス /過去ログ158より / 関連記事表示
削除チェック/

■91888  Re[2]: Form、データテーブル、クラス構築の方法について
□投稿者/ TanuTanu -(2019/08/08(Thu) 14:11:23)
>
    とっちゃん様、魔界の仮面弁士様

    ご指導ありがとうございます。
    本当に毎々ご親切にして頂き感謝するばかりでございます。

    システムイメージは下記となります。

    ■全体像

    Form1:メニュー画面(システム稼動ボタン実装、データセット実装)
     炉orm2:設定画面

    ・システムクラス:TEST1
    ・その他クラス:TEST2〜5


    ■動作

    システム稼動ボタンにてシステムクラスのインスタンス作動

    システムクラスのインスタンスが主体的に動作し必要に応じて
    TEST2〜5のインスタンスを作成し動作させます。

    **************************

    解釈としては、Form1にDataSet1を読書きするプロパティを作り、
    プロパティを通してTEST1から読書きする形に変更で解決すると
    思ってよいでしょうか?

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



<< 0 >>

パスワード/

- Child Tree -