for Push.
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace KssSmaPlaLib.Forms.Controls
|
||||
{
|
||||
public class PoiDgv : DataGridView
|
||||
{
|
||||
private IContainer components;
|
||||
|
||||
[Category("Poi拡張"), Description("共通メニューを自動で追加するかどうか")]
|
||||
public bool EnablePoiMenu { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// コンストラクタ
|
||||
/// </summary>
|
||||
public PoiDgv()
|
||||
{
|
||||
// これが今回の本命!
|
||||
this.DoubleBuffered = true;
|
||||
|
||||
// DGB初期設定
|
||||
this.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
|
||||
this.RowHeadersVisible = false;
|
||||
this.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
|
||||
this.AllowUserToAddRows = false;
|
||||
this.AllowUserToDeleteRows = false;
|
||||
this.AllowUserToOrderColumns = true;
|
||||
this.AllowUserToResizeColumns = true;
|
||||
this.AllowUserToResizeRows = false;
|
||||
this.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// コンテキストメニュー設定時
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
protected override void OnContextMenuStripChanged(EventArgs e)
|
||||
{
|
||||
base.OnContextMenuStripChanged(e);
|
||||
|
||||
// ユーザーがデザイナーでセットしたメニューに「Poi」のスパイスを加える
|
||||
if (EnablePoiMenu && this.ContextMenuStrip != null)
|
||||
{
|
||||
var menu = this.ContextMenuStrip;
|
||||
|
||||
//// 重複防止チェック
|
||||
//if (menu.Items.Find("poiItem_AutoFit", true).Length == 0)
|
||||
//{
|
||||
// if (menu.Items.Count > 0) menu.Items.Add(new ToolStripSeparator());
|
||||
|
||||
// var fitItem = new ToolStripMenuItem("列幅をぽいっと自動調整");
|
||||
// fitItem.Name = "poiItem_AutoFit";
|
||||
// fitItem.Click += (s, ev) => this.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
|
||||
|
||||
// menu.Items.Add(fitItem);
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// PoiDgv
|
||||
//
|
||||
this.RowTemplate.Height = 21;
|
||||
((System.ComponentModel.ISupportInitialize)(this)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -0,0 +1,588 @@
|
||||
using DocumentFormat.OpenXml.VariantTypes;
|
||||
using KssSmaPlaLib.Ini;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Windows.Media.Streaming.Adaptive;
|
||||
|
||||
namespace KssSmaPlaLib.Forms.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// Poiメインフォーム
|
||||
/// </summary>
|
||||
public class PoiMainForm : Form
|
||||
{
|
||||
protected Label TitleLabel;
|
||||
protected PoiDgv MainDgv;
|
||||
protected ContextMenuStrip MainContextMenu;
|
||||
protected ToolStripMenuItem TitleVisibleCheckMenu;
|
||||
private ToolStripMenuItem _versionMenu;
|
||||
private NumericUpDown _titleLabelYohakuHorizonNumeric = new NumericUpDown { Width = 60 };
|
||||
private NumericUpDown _titleLabelYohakuVarticalNumeric = new NumericUpDown { Width = 60 };
|
||||
// 👇遅延書き込みしようかと思ったがやめた!
|
||||
//private Timer _saveDelayTimer = new Timer { Interval = 1000 };
|
||||
private string _title = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// コンストラクタ
|
||||
/// </summary>
|
||||
public PoiMainForm(string title = "", string name = "")
|
||||
{
|
||||
// Name
|
||||
this.Name = string.IsNullOrEmpty(name) ? this.GetType().Name : name;
|
||||
|
||||
// タイトル
|
||||
_title = string.IsNullOrEmpty(title) ? this.Name : title;
|
||||
this.Text = _title;
|
||||
|
||||
// フォームイベント
|
||||
this.Load += PoiMainForm_Load;
|
||||
this.FormClosing += PoiMainForm_FormClosing;
|
||||
|
||||
// コントロールの生成と配置
|
||||
TitleLabel = new Label
|
||||
{
|
||||
Name = "TitleLabel",
|
||||
AutoSize = true,
|
||||
Dock = DockStyle.Top,
|
||||
Text = "サンプルです💖",
|
||||
};
|
||||
TitleLabel.Padding = new Padding(20, 5, 8, 20);
|
||||
MainDgv = new PoiDgv
|
||||
{
|
||||
Name = "MainDgv",
|
||||
Dock = DockStyle.Fill
|
||||
};
|
||||
MainContextMenu = new ContextMenuStrip
|
||||
{
|
||||
Name = "MainContextMenu",
|
||||
};
|
||||
this.ContextMenuStrip = MainContextMenu;
|
||||
this.Controls.Add(MainDgv);
|
||||
this.Controls.Add(TitleLabel);
|
||||
|
||||
// デフォルトのメニュー項目登録
|
||||
CreateDefaultMenu();
|
||||
|
||||
DgvHelper.DgvLoadFontFromIni(MainDgv);
|
||||
//ContextMenuHelper.MenuCheckBoxItemLoad(this, TitleVisibleCheckMenu);
|
||||
TitleLabel.Visible = TitleVisibleCheckMenu.Checked;
|
||||
ContextMenuHelper.SetControlFont(this, TitleLabel);
|
||||
ContextMenuHelper.DispVersion(_versionMenu);
|
||||
|
||||
// ソート無効
|
||||
foreach (DataGridViewColumn column in MainDgv.Columns) column.SortMode = DataGridViewColumnSortMode.NotSortable;
|
||||
//// 日の列はセンタリング
|
||||
//for (var day = 1; day <= 31; day++) MainDgv.Columns[$"ColDay{day}"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
|
||||
// TOTAL列は右寄せ
|
||||
//MainDgv.Columns["ColTotal"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
|
||||
// ヘッダ行のデザインはOSのデザインを反映させる機能を解除
|
||||
MainDgv.EnableHeadersVisualStyles = false;
|
||||
|
||||
// 👇やろうかと思ったけどやめた!
|
||||
//// 遅延書き込みタイマー
|
||||
//_saveDelayTimer.Tick += (s, e) =>
|
||||
//{
|
||||
// _saveDelayTimer.Stop(); // タイマーを止める
|
||||
// // 👑 ここでINIファイルへの書き込みを実行!
|
||||
// // スピンボタン連打が「止まってから1秒後」に1回だけ綺麗に保存されます。
|
||||
// aaaaaaa
|
||||
//};
|
||||
//LoadDataAsync();
|
||||
|
||||
// タイトル文字列設定
|
||||
//TitleLabel.Text = GetTitle();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// フォームロード時
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
/// <exception cref="NotImplementedException"></exception>
|
||||
private void PoiMainForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
FormHelper.LoadFormBounds(this);
|
||||
DgvHelper.DgvLoadFontFromIni(MainDgv);
|
||||
DgvHelper.DgvLoadColWidth(MainDgv);
|
||||
DgvHelper.DgvLoadHeaderHeight(MainDgv);
|
||||
DgvHelper.DgvLoadColVisible(MainDgv);
|
||||
DgvHelper.DgvLoadColDisplayIndex(MainDgv);
|
||||
DgvHelper.DgvLoadColFrozen(MainDgv);
|
||||
DgvHelper.DgvSetHeaderBackColorFromIni(this, MainDgv);
|
||||
//DgvHelper.DgvSetHeaderBackColorFromIniWithNameMatch(this, MainDgv, "ColDay*", INI_KEY_HEADER_DAY_COLUMN_BACK_COLOR);
|
||||
|
||||
// 👇これはLoadでやらないと、子で作ってるメニューアイテムに反映されない!
|
||||
ContextMenuHelper.LoadAllMenuStates(this, MainContextMenu);
|
||||
ContextMenuHelper.SetFont(this, MainContextMenu);
|
||||
var vertical =
|
||||
int.TryParse(
|
||||
IniHelper.ReadValue(null, this.Name, _titleLabelYohakuVarticalNumeric.Name, "0"),
|
||||
out var intVal) ? intVal : 0;
|
||||
var horizon =
|
||||
int.TryParse(
|
||||
IniHelper.ReadValue(null, this.Name, _titleLabelYohakuHorizonNumeric.Name, "0"),
|
||||
out intVal) ? intVal : 0;
|
||||
TitleLabel.Padding = new Padding(horizon, vertical, horizon, vertical);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// フォーム閉じるとき
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
/// <exception cref="NotImplementedException"></exception>
|
||||
private void PoiMainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
FormHelper.SaveFormBounds(this);
|
||||
DgvHelper.DgvSaveFontToIni(MainDgv);
|
||||
DgvHelper.DgvSaveColWidth(MainDgv);
|
||||
DgvHelper.DgvSaveHeaderHeight(MainDgv);
|
||||
DgvHelper.DgvSaveColVisible(MainDgv);
|
||||
DgvHelper.DgvSaveColDisplayIndex(MainDgv);
|
||||
DgvHelper.DgvSaveColFrozen(MainDgv);
|
||||
IniHelper.WriteValue(
|
||||
null, this.Name,
|
||||
_titleLabelYohakuHorizonNumeric.Name,
|
||||
_titleLabelYohakuHorizonNumeric.Value.ToString());
|
||||
IniHelper.WriteValue(
|
||||
null, this.Name,
|
||||
_titleLabelYohakuVarticalNumeric.Name,
|
||||
_titleLabelYohakuVarticalNumeric.Value.ToString());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// デフォルトのメニュー項目(表示設定など)を作成
|
||||
/// </summary>
|
||||
private void CreateDefaultMenu()
|
||||
{
|
||||
// 仕切り線
|
||||
MainContextMenu.Items.Add(new ToolStripSeparator());
|
||||
|
||||
// 表示設定(親)
|
||||
var hyojiSetteiMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "HyojiSetteiMenu",
|
||||
Text = "表示設定",
|
||||
};
|
||||
MainContextMenu.Items.Add(hyojiSetteiMenu);
|
||||
|
||||
// メニューのフォント(クリック動作)
|
||||
var menuFontMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "MenuFontMenu",
|
||||
Text = "メニューのフォント...",
|
||||
};
|
||||
menuFontMenu.Click += (s, e)=>
|
||||
{
|
||||
ContextMenuHelper.SelectMenuFont(this, MainContextMenu);
|
||||
};
|
||||
hyojiSetteiMenu.DropDownItems.Add(menuFontMenu);
|
||||
|
||||
// グリッドメニュー(親)
|
||||
var gridMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "GridMenu",
|
||||
Text = "グリッド",
|
||||
};
|
||||
hyojiSetteiMenu.DropDownItems.Add(gridMenu);
|
||||
|
||||
// グリッドフォントメニュー(クリック動作)
|
||||
var gridFontMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "GridFontMenu",
|
||||
Text = "フォント...",
|
||||
};
|
||||
gridFontMenu.Click += (s, e) =>
|
||||
{
|
||||
DgvHelper.DgvSelectFont(this, MainDgv);
|
||||
};
|
||||
gridMenu.DropDownItems.Add(gridFontMenu);
|
||||
|
||||
// グリッド列非表示メニュー(クリック動作)
|
||||
var gridColumnDisabledMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "GridColumnDisabledMenu",
|
||||
Text = "この列を非表示にする",
|
||||
};
|
||||
gridColumnDisabledMenu.Click += (s, e) =>
|
||||
{
|
||||
if (MainDgv.CurrentCell is null) return;
|
||||
MainDgv.Columns[MainDgv.CurrentCell.ColumnIndex].Visible = false;
|
||||
};
|
||||
gridMenu.DropDownItems.Add(gridColumnDisabledMenu);
|
||||
|
||||
// グリッド列再表示メニュー(クリック動作)
|
||||
var gridColumnRedispMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "GridColumnRedispMenu",
|
||||
Text = "列の再表示",
|
||||
};
|
||||
gridColumnRedispMenu.Click += (s, e) =>
|
||||
{
|
||||
DgvHelper.DgvRedispAllColumn(MainDgv);
|
||||
};
|
||||
gridMenu.DropDownItems.Add(gridColumnRedispMenu);
|
||||
|
||||
// グリッド列幅自動調整メニュー(クリック動作)
|
||||
var columnWidthAutoAdjustMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "ColumnWidthAutoAdjustMenu",
|
||||
Text = "列幅の自動調整",
|
||||
};
|
||||
columnWidthAutoAdjustMenu.Click += (s, e) =>
|
||||
{
|
||||
DgvHelper.DgvColumnWidthAutoAdjust(MainDgv);
|
||||
};
|
||||
gridMenu.DropDownItems.Add(columnWidthAutoAdjustMenu);
|
||||
|
||||
// グリッド列固定メニュー(クリック動作)
|
||||
var gridColumnFixMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "GridColumnFixMenu",
|
||||
Text = "列固定",
|
||||
};
|
||||
gridColumnFixMenu.Click += (s, e) =>
|
||||
{
|
||||
DgvHelper.DgvColumnFix(MainDgv);
|
||||
};
|
||||
gridMenu.DropDownItems.Add(gridColumnFixMenu);
|
||||
|
||||
// グリッド列固定解除メニュー(クリック動作)
|
||||
var gridColumnFixKaijoMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "GridColumnFixKaijoMenu",
|
||||
Text = "列固定解除",
|
||||
};
|
||||
gridColumnFixKaijoMenu.Click += (s, e) =>
|
||||
{
|
||||
DgvHelper.DgvColumnFixKaijo(MainDgv);
|
||||
};
|
||||
gridMenu.DropDownItems.Add(gridColumnFixKaijoMenu);
|
||||
|
||||
// グリッドのヘッダ(親)
|
||||
//this.GridHeaderMenu});
|
||||
var gridHeaderMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "GridHeaderMenu",
|
||||
Text = "ヘッダ",
|
||||
};
|
||||
gridMenu.DropDownItems.Add(gridHeaderMenu);
|
||||
|
||||
// グリッドヘッダ背景色(クリック動作)
|
||||
var gridHeaderBackColorMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "GridHeaderBackColorMenu",
|
||||
Text = "ヘッダ背景色...",
|
||||
};
|
||||
gridHeaderBackColorMenu.Click += (s, e) =>
|
||||
{
|
||||
DgvHelper.DgvSelectHeaderBackColor(this, MainDgv);
|
||||
};
|
||||
gridHeaderMenu.DropDownItems.Add(gridHeaderBackColorMenu);
|
||||
|
||||
// グリッドヘッダの日の背景色(クリック動作)
|
||||
var gridHeaderDayBackColorMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "GridHeaderDayBackColorMenu",
|
||||
Text = "日の背景色...",
|
||||
Enabled = false, // デフォルトは非活性
|
||||
};
|
||||
gridHeaderDayBackColorMenu.Click += (s, e) =>
|
||||
{
|
||||
DgvHelper.DgvSelectHeaderBackColorWithNameMatch(this, MainDgv, "ColDay*", gridHeaderDayBackColorMenu.Name);
|
||||
};
|
||||
gridHeaderMenu.DropDownItems.Add(gridHeaderDayBackColorMenu);
|
||||
|
||||
// グリッドヘッダの非稼働日の背景色(クリック動作)
|
||||
var gridHeaderHikadobiBackColorMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "GridHeaderHikadobiBackColorMenu",
|
||||
Text = "非稼働日の背景色...",
|
||||
Enabled = false, // デフォルトは非活性
|
||||
};
|
||||
gridHeaderHikadobiBackColorMenu.Click += (s, e) =>
|
||||
{
|
||||
// Comming soon!
|
||||
MessageBox.Show(this,"カミングスーン!",this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
};
|
||||
gridHeaderMenu.DropDownItems.Add(gridHeaderHikadobiBackColorMenu);
|
||||
|
||||
//this.GridHeaderMenu.DropDownItems.AddRange(
|
||||
// new System.Windows.Forms.ToolStripItem[] {
|
||||
//this.,
|
||||
//this.,
|
||||
//this.});
|
||||
|
||||
// グリッドメニューを開くときの制御
|
||||
gridMenu.DropDownOpening += (s, e) =>
|
||||
{
|
||||
// 「この列の非表示」はアクティブセルがあるときだけ有効
|
||||
gridColumnDisabledMenu.Enabled = !(MainDgv.CurrentCell is null);
|
||||
// 「列の再表示」は非表示列があるときだけ有効
|
||||
gridColumnRedispMenu.Enabled =
|
||||
MainDgv.Columns.GetColumnCount(DataGridViewElementStates.Visible)
|
||||
!= MainDgv.Columns.Count;
|
||||
// 「列固定」はアクティブセルがあるときだけ有効
|
||||
gridColumnFixMenu.Enabled = !(MainDgv.CurrentCell is null);
|
||||
// 「列固定解除」は列固定がされているときだけ有効
|
||||
gridColumnFixKaijoMenu.Enabled = MainDgv.Columns
|
||||
.Cast<DataGridViewColumn>()
|
||||
.Any(c => c.Frozen);
|
||||
};
|
||||
|
||||
// タイトル(親)
|
||||
var titleMenu =
|
||||
new ToolStripMenuItem()
|
||||
{
|
||||
Name = "TitleMenu",
|
||||
Text = "タイトル",
|
||||
};
|
||||
hyojiSetteiMenu.DropDownItems.Add(titleMenu);
|
||||
|
||||
// タイトル表示(チェックボックス)
|
||||
TitleVisibleCheckMenu =
|
||||
new ToolStripMenuItem()
|
||||
{
|
||||
Name = "TitleVisibleCheckMenu",
|
||||
Text = "タイトル表示?",
|
||||
CheckOnClick = true,
|
||||
};
|
||||
TitleVisibleCheckMenu.CheckedChanged += (s, e) =>
|
||||
{
|
||||
var mi = (ToolStripMenuItem)s;
|
||||
IniHelper.WriteBoolValue(null, this.Name, mi.Name,
|
||||
mi.Checked);
|
||||
TitleLabel.Visible = mi.Checked;
|
||||
};
|
||||
titleMenu.DropDownItems.Add(TitleVisibleCheckMenu);
|
||||
|
||||
// タイトルフォントメニュー(クリック動作)
|
||||
var titleFontMenu =
|
||||
new ToolStripMenuItem()
|
||||
{
|
||||
Name = "TitleFontMenu",
|
||||
Text = "フォント...",
|
||||
};
|
||||
titleFontMenu.Click += (s, e) =>
|
||||
{
|
||||
ContextMenuHelper.SelectControlFont(this, TitleLabel);
|
||||
};
|
||||
titleMenu.DropDownItems.Add(titleFontMenu);
|
||||
|
||||
// タイトル余白(親)
|
||||
var titleYohakuMenu = new ToolStripMenuItem()
|
||||
{
|
||||
Name = "TitleYohakuMenu",
|
||||
Text = "余白",
|
||||
};
|
||||
titleMenu.DropDownItems.Add(titleYohakuMenu);
|
||||
|
||||
// 余白設定パネル
|
||||
titleYohakuMenu.DropDownItems.Add(CreateYohakuPanelMenu());
|
||||
|
||||
// 仕切り線
|
||||
MainContextMenu.Items.Add(new ToolStripSeparator());
|
||||
|
||||
// バージョン表示メニュー(表示のみ)
|
||||
_versionMenu =
|
||||
new ToolStripMenuItem()
|
||||
{
|
||||
Name = "VersionMenu",
|
||||
Text = "バージョン情報",
|
||||
};
|
||||
MainContextMenu.Items.Add(_versionMenu);
|
||||
|
||||
//titleMenu.DropDownItems.Add(CreateYohakuPanelMenu());
|
||||
//MainContextMenu.Items.Add(CreateYohakuPanelMenu());
|
||||
|
||||
// 実験!✨✨✨
|
||||
|
||||
//// NumericUpDownを生成して設定
|
||||
//NumericUpDown numericUpDown = new NumericUpDown();
|
||||
//numericUpDown.Minimum = 0;
|
||||
//numericUpDown.Maximum = 100;
|
||||
//numericUpDown.Value = 10;
|
||||
//numericUpDown.Width = 60; // メニュー内で邪魔にならない幅に調整
|
||||
//// ToolStripControlHostでラップしてメニューに追加
|
||||
//ToolStripControlHost host = new ToolStripControlHost(numericUpDown);
|
||||
//MainContextMenu.Items.Add(host); // または menuStrip1.Items.Add(host);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 余白調整パネルメニュー作成
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private ToolStripControlHost CreateYohakuPanelMenu()
|
||||
{
|
||||
// 1. 土台となるパネル(縦方向にコントロールを並べる)
|
||||
TableLayoutPanel miniDialog = new TableLayoutPanel();
|
||||
miniDialog.ColumnCount = 2; // 2列のグリッド
|
||||
miniDialog.RowCount = 2; // 3; // 3行
|
||||
miniDialog.AutoSize = true;
|
||||
miniDialog.Padding = new Padding(10); // 周囲に余白を作ってダイアログ感を出す
|
||||
miniDialog.BackColor = Color.FromArgb(240, 240, 240); // ほんのり背景色を変える
|
||||
// 2. コントロール達を作成
|
||||
Label lblX = new Label { Text = "横余白:", AutoSize = true, Anchor = AnchorStyles.Left };
|
||||
_titleLabelYohakuHorizonNumeric = new NumericUpDown
|
||||
{
|
||||
Name = "TitleLabelYohakuHorizonNumeric",
|
||||
Width = 60,
|
||||
TextAlign = HorizontalAlignment.Right,
|
||||
};
|
||||
_titleLabelYohakuHorizonNumeric.ValueChanged += (sender, e) =>
|
||||
{
|
||||
TitleLabel.Padding = new Padding(
|
||||
(int)_titleLabelYohakuHorizonNumeric.Value,
|
||||
TitleLabel.Padding.Top,
|
||||
(int)_titleLabelYohakuHorizonNumeric.Value,
|
||||
TitleLabel.Padding.Bottom);
|
||||
// 🔥🌊INI書きはFormClosingで行う!
|
||||
};
|
||||
Label lblY = new Label { Text = "縦余白:", AutoSize = true, Anchor = AnchorStyles.Left };
|
||||
_titleLabelYohakuVarticalNumeric = new NumericUpDown
|
||||
{
|
||||
Name = "TitleLabelYohakuVarticalNumeric",
|
||||
Width = 60,
|
||||
TextAlign = HorizontalAlignment.Right,
|
||||
};
|
||||
_titleLabelYohakuVarticalNumeric.ValueChanged += (sender, e) =>
|
||||
{
|
||||
TitleLabel.Padding = new Padding(
|
||||
TitleLabel.Padding.Left,
|
||||
(int)_titleLabelYohakuVarticalNumeric.Value,
|
||||
TitleLabel.Padding.Right,
|
||||
(int)_titleLabelYohakuVarticalNumeric.Value);
|
||||
// 🔥🌊INI書きはFormClosingで行う!
|
||||
};
|
||||
//CheckBox chkAuto = new CheckBox { Text = "自動調整", AutoSize = true };
|
||||
// 3. グリッドパネルに綺麗に配置
|
||||
miniDialog.Controls.Add(lblX, 0, 0);
|
||||
miniDialog.Controls.Add(_titleLabelYohakuHorizonNumeric, 1, 0);
|
||||
miniDialog.Controls.Add(lblY, 0, 1);
|
||||
miniDialog.Controls.Add(_titleLabelYohakuVarticalNumeric, 1, 1);
|
||||
//// チェックボックスは2列分ぶち抜きで配置
|
||||
//miniDialog.Controls.Add(chkAuto, 0, 2);
|
||||
//miniDialog.SetColumnSpan(chkAuto, 2);
|
||||
// 4. メニューにホストする
|
||||
//ToolStripControlHost dialogHost = new ToolStripControlHost(miniDialog);
|
||||
//MainContextMenu.Items.Add(dialogHost);
|
||||
|
||||
// 開くときの処理
|
||||
var tssh = new ToolStripControlHost(miniDialog);
|
||||
tssh.OwnerChanged += (sender, e) =>
|
||||
{
|
||||
// 親となるメニュー(ToolStripDropDown)を取得
|
||||
if (tssh.Owner is ToolStripDropDown parentMenu)
|
||||
{
|
||||
// 親の「開く直前イベント」に、自分のメソッドをこっそり登録する!
|
||||
parentMenu.Opening -= ParentMenu_Opening; // 二重登録防止
|
||||
parentMenu.Opening += ParentMenu_Opening;
|
||||
}
|
||||
};
|
||||
return tssh;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 親メニュー開くときに追加する処理
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ParentMenu_Opening(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
//// フォントを親に合わせる(階層深いと反映されないため)
|
||||
//_titleLabelYohakuHorizonNumeric.Font =
|
||||
// _titleLabelYohakuVarticalNumeric.Font =
|
||||
// MainContextMenu.Font;
|
||||
// パネルの合わせ、再レイアウト(パネルが階層奥深くだと、なぜか反映されていなかったりする)
|
||||
var parent = _titleLabelYohakuHorizonNumeric.Parent;
|
||||
if (parent != null)
|
||||
{
|
||||
parent.Font = MainContextMenu.Font;
|
||||
parent.PerformLayout();
|
||||
}
|
||||
|
||||
// タイトルラベルの現在の余白をNumericUpDownに設定
|
||||
_titleLabelYohakuHorizonNumeric.Value = TitleLabel.Padding.Left;
|
||||
_titleLabelYohakuVarticalNumeric.Value = TitleLabel.Padding.Top;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// メニュー項目追加
|
||||
/// </summary>
|
||||
/// <param name="text"></param>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="defaultValue"></param>
|
||||
/// <param name="onCheckedChanged"></param>
|
||||
/// <returns></returns>
|
||||
protected ToolStripMenuItem AddCheckMenuItem(
|
||||
int index,
|
||||
string text,
|
||||
string name,
|
||||
bool defaultValue,
|
||||
Action<bool> onCheckedChanged = null)
|
||||
{
|
||||
var item = new ToolStripMenuItem(text);
|
||||
|
||||
// チェックボックスとして機能する
|
||||
item.CheckOnClick = true;
|
||||
|
||||
item.Name = name;
|
||||
|
||||
// 3. CheckedChanged イベントをここで一括で仕込む!
|
||||
item.CheckedChanged += (sender, e) =>
|
||||
{
|
||||
var mi = (ToolStripMenuItem)sender;
|
||||
|
||||
// チェック値をINI保存
|
||||
IniHelper.WriteBoolValue(null, this.Name, mi.Name, mi.Checked);
|
||||
|
||||
// イベントプロシージャ(あるとき)
|
||||
onCheckedChanged?.Invoke(mi.Checked);
|
||||
};
|
||||
|
||||
MainContextMenu.Items.Insert(index, item);
|
||||
return item;
|
||||
}
|
||||
|
||||
public enum PoiAlign
|
||||
{
|
||||
Left,
|
||||
Right,
|
||||
Center,
|
||||
}
|
||||
|
||||
private DataGridViewContentAlignment GetDgvAlign(PoiAlign align)
|
||||
{
|
||||
switch (align)
|
||||
{
|
||||
case PoiAlign.Left: return DataGridViewContentAlignment.MiddleLeft;
|
||||
case PoiAlign.Center: return DataGridViewContentAlignment.MiddleCenter;
|
||||
case PoiAlign.Right: return DataGridViewContentAlignment.MiddleRight;
|
||||
default: return DataGridViewContentAlignment.MiddleLeft;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 列追加
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="text"></param>
|
||||
/// <param name="align"></param>
|
||||
protected void AddColumn(string name, string text, PoiAlign align = PoiAlign.Left)
|
||||
{
|
||||
var col = new DataGridViewTextBoxColumn()
|
||||
{
|
||||
Name = name,
|
||||
HeaderText = text,
|
||||
ReadOnly = true,
|
||||
};
|
||||
col.DefaultCellStyle.Alignment = GetDgvAlign(align);
|
||||
MainDgv.Columns.Add(col);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user