AccessVBAで、フォームをダイアログで開いているはずが処理が流れてしまう

投稿者: Anonymous お世話になります。 AccessのVBAで、フォームをダイアログで(そこでブロックして)表示しようとしているのですが、どうやってもそのまま処理が流れてしまいます。 行っていることは、 プロパティでは ・ポップアップ = はい ・作業ウィンドウ固定 = はい 実際にコードで表示する際には、 DoCmd.OpenForm “F_Floor”, , , , , acDialog と 記述しています。 これだけの設定でできるはずなのですが、他に何か原因がありますでしょうか。 下記にその部分コードを記述します。 For cnt = 0 To 3 MsgBox “” & cnt & “階です。” DoCmd.OpenForm “F_Floor”, , , , , acDialog MsgBox “a” Next 『○階です』の部分が出てから『a』が、F_Floorの終了を待たずに出てしまいます。 Accessのバージョンは2010です。 よろしくお願いいたします。 解決 DoCmd.OpenForm は、第1引数のフォーム名以外は省略可能です。そのため、第2引数以降は引数名を明記しなくてはなりません。 DoCmd.OpenForm “F_Floor”, , ,…(Continue Reading)

C# 階層の出来上がっているToolStripMenuItemから一段階下の階層を得るときにエラーになる

投稿者: Anonymous お世話になります。 CSVのテキストを読み込み、自動的にContextMenuStripを生成するコードを書いています。 一つルート階層のToolStripMenuItemを準備してから、ツリー構造を作るような アルゴリズムにしました。 最後に、いざContextMenuStripに乗せるときに、rootをそのまま乗せると、root自体が 邪魔に感じてしまうので、rootの子供からContextMenuStripに乗せようとするのですが、 例外が発生して思うように動きません。 原因と対策をお教えいただけますでしょうか。 下記にコードを記述します。 private void BaseForm_Load(object sender, EventArgs e) { // cmsはContextMenuStrip string[] stItems = File.ReadAllLines(@”C:xxxxxxx売り物.txt”); if(stItems == null) { return; } this.cms.Items.Clear(); ToolStripMenuItem root = new ToolStripMenuItem(); foreach (string s in stItems) { string[] values = s.Split(‘,’); ToolStripMenuItem parent = root; foreach (string ss in values) {…(Continue Reading)

formのsubmit(送信)を非表示にしたいです。

投稿者: Anonymous 大変お世話になっております。 以下の様にformのsubmitをjsを利用して自動でクリックされる仕様にしておりますが、ページ上に送信という文字およびそれを囲むボックスが表示されます。 このボックス、および送信という文字を非表示にさせ、ぺージ自体に何も表示させず、次のページに行き着く様にしたいです。 どうすれば非表示にできるかお教え願いませんでしょうか。 <?php /////////////// phpの記述 /////////////// ?> <form action=’xxxxxxx.php’ METHOD=’POST’> <input type=”submit” id=”submit” /> </form> <head> <script> document.getElementById(“submit”).click(); </script> 解決 表示したくないボックスにdisplay:none;のスタイルを当てれば、画面上に表示しなくなります <form action=’xxxxxxx.php’ METHOD=’POST’ > <input type=”submit” id=”submit” style=”display:none;” /> </form> 送信フォームを表示しないなどのいわゆる画面の装飾は一般的にビュー側(HTML、CSS)の領域になります。 PHP側では特には何もできないです。 さらに、何もしないで別のPHPにPOSTするのであれば、POST先が自分のアプリケーション責任範囲であればわざわざ画面を呼び出して再POSTするのではなく、実行したい処理を関数化などすれば画面の遷移が少なくなると思います。 画面遷移するPHP POSTするPHP <?php /////////////// phpの記述 /////////////// ?> <form action=’xxxxxxx.php’ METHOD=’POST’> <input type=”hidden” name=”aaa” value=”1″/> <input type=”hidden” name=”bbb”…(Continue Reading)

HTMLフォームのsetAttribute、removeAttributeが効きません

投稿者: Anonymous お世話になります。 HTMLおよびJavascriptで質問です。 以下のようなHTMLファイル、text.htmlを作成しました。 <!DOCTYPE html> <html> <head> <base target=”_top”> <title>属性の変更テスト</title> </head> <body> <h1>属性の変更テスト</h1> <form method=”get” action=”https://test.example.com” name=”TextForm”> <input id=”Text_1″ type=”text” name=”Text_1″ size=80 disabled /><br /> <script> function makeTextEnabled() { document.getElementById(‘Text_1’).removeAttribute(“disabled”); document.getElementById(‘Text_1’).setAttribute(“required”); } function makeTextDisabled() { document.getElementById(‘Text_1’).removeAttribute(“required”); document.getElementById(‘Text_1’).setAttribute(“disabled”); } </script> <textarea cols=”60″ rows=”2″ onselect=”makeTextEnabled()”> このテキストを選択したらTextが有効になるはず </textarea><br /> <textarea cols=”60″ rows=”2″ onselect=”makeTextDisabled()”> このテキストを選択したらTextが無効になるはず </textarea><br />…(Continue Reading)

HTMLのラジオボタンで同じものを選択できないようにしたい

投稿者: Anonymous HTMLのformで使うラジオボタンについて、グループ分けしたときに同じものを選択できないようにしたいのですが、そのときJavascriptを使わない方法を探しています。 例えば、好きな果物と嫌いな果物を選択する場合にこのようにしたとします。 <form> 好きな果物 <input type=’radio’ name=’like’ value=’0′>りんご <input type=’radio’ name=’like’ value=’1′>みかん <input type=’radio’ name=’like’ value=’2′>いちご 嫌いな果物 <input type=’radio’ name=’dislike’ value=’0′>りんご <input type=’radio’ name=’dislike’ value=’1′>みかん <input type=’radio’ name=’dislike’ value=’2′>いちご </form> これで好きな果物を一つ、嫌いな果物を一つ選択できるわけですが、このとき同時に同じ果物は選択できないようにしたいのです。 例えば、好きな果物=りんご、嫌いな果物=りんご、とはできないようにしたいのですが、それをjavascriptを使わずhtmlだけで行う方法はないでしょうか。 解決 HTMLのradioの特性上 ・radio は同じname属性の中から一つだけ選択できる。 ・name属性は一つだけ設定する 今回の要件では ・好きな果物を「りんご」「みかん」「いちご」から一つ ・嫌いな果物を「りんご」「みかん」「いちご」から一つ and ・果物は「好き」か「嫌い」か「どれでもない」から一つ という2次元の択一選択制御が必要になるため提示の選択肢でHTMLだけで制御するには難しそうです。 ちょっと見た目が無様ですが場合分けをすべて列挙して1次元にするしかないと思います。 <form> <input type=’radio’ name=’likes_and_dislikes’ value=’0′>好きな果物はりんご、嫌いな果物はみかん <input type=’radio’ name=’likes_and_dislikes’ value=’1′>好きな果物はりんご、嫌いな果物はいちご…(Continue Reading)

C# スプラッシュウインドウを作り表示させても、きれいに表示されない

投稿者: Anonymous お世話になります。 C#(.Net Framework)2019にて、アプリケーションを作っています。長い処理をさせているときにスプラッシュスクリーンを表示させようと、ラベルとPictureBoxを使用して簡単なSSを作ったのですが、いざ表示させて メインの処理に入ると、SSの描画が終わらないらしく、ラベルとPictureBoxの部分が透過して 表示され、処理が終了するまでそのままの状態で表示されてしまいます。 ↑これが作成したSSです。 ↑実際に表示させると、コントロールの部分が透過しています。 スクリーンショットでも撮れなかったので、エディタ上のデザインを表示させていますが、実際には 上記画像の黒い部分が抜けている状態です。 考え方では、SSが描画が終了したらメインの処理を行えばよいと思うのですが、どうすればよいでしょうか。 ちなみに、SSはShowDialogではなく、Showで表示させ、同じメソッド内で表示し、処理が完了したら閉じるようになっています。 下記がコードです。 private void reload() { FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.Description = “ファイルを検索するルートフォルダを選択してください。”; if (fbd.ShowDialog() != DialogResult.OK) { return; } string stSelectedPath = fbd.SelectedPath; if (!System.IO.Directory.Exists(stSelectedPath)) { MessageBox.Show(“指定されたフォルダは存在しません。”, “”, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } SplashScreen ss = new SplashScreen();    // ここで表示するも、きれいに出ない。 ss.Show(this); if (!PlayListModel.reload(stSelectedPath))…(Continue Reading)

C# DataGridViewの指定の列だけフォームのサイズに合わせて自動調整したい

投稿者: Anonymous お世話になります。 C#にて、DataGridの勉強中です。 フォームにDataGridViewをDock = Fillで貼り付けた後、フォーム側のサイズ変更に合わせて DataGridViewのサイズも自動変更されるので、そのタイミング(Resizeイベント)で 指定のColumnだけの幅を残り空間分だけ広げようとしています。 全てのColumnを伸縮するには、AutoSizeColumnModeというのがあるらしいのですが、 五列のうちの4,5列目だけを伸縮させたいのです。 方法として、DataGridViewの幅から、伸縮する必要のないColumnの合計を引き、それを 二で割って4,5列のWidthに入れました。 ある程度はうまくいったのですが、見落としていた点があり、左側のレコードセレクタ部分の 幅を取得できずにいました。 それを計算で取得しようとしたのですが、うまくいかなかったため、質問いたしました。 この部分の幅を取得する方法はありますでしょうか。 また、もっと簡単に行える方法がありましたら、ご教授いただければ幸いです。 下記が試してみた計算部分です。 private void dataGridView1_Resize(object sender, EventArgs e) { int space = this.dataGridView1.Width – (this.dataGridView1.Columns[0].Width + this.dataGridView1.Columns[1].Width + this.dataGridView1.Columns[2].Width); this.dataGridView1.Columns[3].Width = space / 2; this.dataGridView1.Columns[4].Width = space / 2; } よろしくお願いいたします。 解決 その部分の列全体というわけではないですが、左上隅のセルの幅ならば、this.dataGridView1.TopLeftHeaderCell.Size.Widthで読み取れます。 図の緑で囲んだ部分ですね。 参考: DataGridViewのヘッダーセルを取得する 左上隅のセルを取得するにはDataGridView.TopLeftHeaderCellプロパティを使用します。 DataGridViewTopLeftHeaderCell…(Continue Reading)

Rails6においてform forでのエラーが発生する

投稿者: Anonymous 前提・実現したいこと 現在、インスタクローンアプリでコメント機能を実装中です。 投稿一覧画面に直接コメント一覧とコメント投稿フォームも表示したいと考えています。 発生している問題・エラーメッセージ ArgumentError in MainPage#main First argument in form cannot contain nil or be empty 該当のソースコード 関連があると思われるコードを以下に記載します。 main_page_controller.rb class MainPageController < ApplicationController def main if logged_in? @micropost = current_user.microposts.build @feed_items = current_user.feed.paginate(page: params[:page]) end end end micropost.rb class Micropost < ApplicationRecord belongs_to :user has_many :likes, dependent: :destroy has_many :love_users, through: :likes,…(Continue Reading)

C# フォームの背景を右下に表示させたい

投稿者: Anonymous お世話になります。 C#にて、フォームを生成して、BackgroundImageを設定した後、BackgroundImageLayoutをNoneに すれば、設定した画像は左上に表示されますが、これを右下に表示されることはできますでしょうか。もちろん、フォームの拡大・縮小に合わせて配置されるものとします。また、元の画像自体には一切手を加えないものとします。 自分で考えた方法ですが、フォームの起動時、及びサイズ変更時にフォーム全体のサイズを図り、それに対するクライアント領域と同じサイズのイメージを生成し、そのイメージの右下に描画されるように背景の画像を描画した後、そのイメージをフォームの背景として設定する…などの方法があると 思いましたが、そもそももっと簡単に設定だけで行うことはできますでしょうか? よろしくお願いいたします。 解決 BackgroundImageLayoutプロパティはImageLayoutのみ設定可能ですので、「簡単に設定だけで」右下に表示することはできないと認識しています。 本家SOの類似質問ではOnPaintBackgroundイベントで再描画するコード例が紹介されています。 回答者: Anonymous

あるページの複数のformを一回のクリックでそれぞれ送信することは可能でしょうか。

投稿者: Anonymous 大変お世話になっております。 標題の件に関し、検索等でjavascriptの記述を拝見し、参考にさせて頂きながら以下の様に自らも試しているのですが、順番を変えながら試してもform1、form2のどちらか一方だけが送信されるものの、もう一方は送信されません。 (以下のformは分かりやすくする為、簡略化しております。form自体の内容がformが起動されない原因ではないと考えている為。) 個別に送信すると、どちらも次ページの画面を開きながらformを送信するのですが、同時送信にすると、一つのformが送信されると、もう一方のformは起動されない様です(一つの画面が開いていると、二つめの画面は開けないのでしょうか?)。 同時に2つの画面を開きながらformを送信することは不可能なのでしょうか。他の手法でも宜しいので、何とかご教授頂けませんでしょうか。 <script type=”text/javascript”> <!– function send() { document.getElementById(‘form1’).submit(); document.getElementById(‘form2’).submit(); } //–> </script> <form id=”form1″ method=”post” action=”www.xxx.com/form1″ target=”_blank”> <form id=”form2″ method=”post” action=”www.xxx.com/form2″ target=”_blank”> <input type=”button” value=”送信する” onClick=”send()”> 解決 Google Chromeでは、1回のクリックで複数のフォームを送信するようなスクリプトは制限されているようです。おそらく、通常のウェブページにおいて1クリックで複数のページが開くことは稀であり、広告などユーザーに悪体験をもたらす動作である可能性が高いことから制限されているのだと思います。 一応、Firefoxではご提示のスクリプトで正しく2つのフォームが送信されました。(すみませんが、IEなど他のブラウザは未確認です。) この制限を回避する方法としては、やや強引ですが以下のようにフォームを別のiframeにコピーしてから送信する方法があります。 <script type=”text/javascript”> <!– function send() { sendFormFromIframe(document.getElementById(‘form1’)); sendFormFromIframe(document.getElementById(‘form2’)); } function sendFormFromIframe(form) { // 新しくiframeを作成して設置 var iframe = document.createElement(‘iframe’);…(Continue Reading)

C# フォームの上に乗せたコントロールにもフォームのマウスイベントが走る簡単な方法

投稿者: Anonymous お世話になります。 https://dobon.net/vb/dotnet/form/moveform.html こちらのサイト様にあるような、フォーム上でドラッグしてフォームの移動をさせるコードを 書いています。 このフォーム上にコントロールを追加すると、そのコントロール上ではマウスイベントは発生しません。移動させるには、追加したコントロールにそれぞれMouseDownとMouseMoveを実装し、その中でOnMouseDownやOnMouseMoveをしないといけません。 これはわかっているのですが、いざフォームにコントロールを五つ六つ…と追加していくと、それぞれに上記の処理を追加しなければならず、手間です。コードでコントロールを追加するなら、コードで何とかできますが、VisualStudioのエディタ上で追加していくと、そうもいきません。 作る側として、その程度の手間は当然といえば当然といわれるかもしれませんが、もしできるなら もっと楽な方法はありませんでしょうか。たとえて言うなら、キーボードの受付を親が管理する 『KeyPreview』のようなものがあるといいなと思うのですが。 よい実装方法などありましたら、ご助力いただければ幸いです。 よろしくお願いいたします。 解決 https://stackoverflow.com/questions/4991044/winforms-intercepting-mouse-event-on-main-form-first-not-on-controls に書いている事を流用して機能拡張してみます。 まずは マウスをクリックするとフォームが移動できるように マウスイベントの処理を書きます。 この状態では ボタン上で マウスクリックするとフォームの移動はできません。 this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown); this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseMove); this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseMove); bool mousePressed; private Point diff; private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == MouseButtons.Left) { mousePressed = true; Point…(Continue Reading)