小编Jim*_*imi的帖子

如何在 WinForms 系统菜单中显示带有图标和文本的菜单项

在调整ygoe答案时,我发现可以在菜单中添加一个图标。

通过将此代码用于纯文本项目,我尝试并成功地做到了这一点:

var item = new MenuItemInfo
{
  cbSize = (uint)Marshal.SizeOf(typeof(MenuItemInfo)),
  cch = (uint)label.Length,
  dwTypeData = label,
  fMask = 0x2 | 0x10, // MIIM_ID | MIIM_TYPE
  fState = 0x0,       // MFS_ENABLED
  fType = 0x0,        // MFT_STRING
  wID = id
};
InsertMenuItem(hMenu, 0, true, ref item);
Run Code Online (Sandbox Code Playgroud)

对于基于图标的项目,我更改fMask并添加hbmpItem如下:

var item = new MenuItemInfo
{
  cbSize = (uint)Marshal.SizeOf(typeof(MenuItemInfo)),
  cch = (uint)label.Length,
  dwTypeData = label,
  fMask = 0x80 | 0x2 | 0x100, // MIIM_BITMAP | MIIM_ID …
Run Code Online (Sandbox Code Playgroud)

c# pinvoke winapi menuitem winforms

3
推荐指数
1
解决办法
1357
查看次数

如何确定C#或VB.NET中的图像是否为灰度?

首先


首先,请注意,给出的答复这个问题将不会对所有的灰度影像,同时也注意到,在接受答案这个其他问题并不能解释所有如何确定是否图像灰度,但反正它不符合我的需求,因为它似乎只涵盖JPEG和TIFF图像,并假设它们将具有EXIF元数据及其中的必需字段.(我无法理解为什么人们确定我所链接的第一个问题是我所链接的第二个问题的"重复"......)

最后,最后接受的答案缺乏一个工作和演示的代码示例,但无论如何都无济于事,因为作者引用了使用Bitmap.GetPixel()函数的缓慢和弃用的方法,但我们应该使用Bitmap.LockBits()函数来获得更高的性能优势.

情景


我有一些GIF,JPG,BMP和PNG图像,我需要确定它们是灰度图像还是不是灰度图像.对于GIF文件,我只关心分析第一帧.

我对图像的数据结构,像素颜色位和那些东西没有多少经验/意识,我只知道非常基础.所以,如果我错过了重要的信息,我应该提供我将要测试的图像的任何信息,那么请问我,但无论如何考虑到我想为"所有"类型的图像创建一个通用的解决方案,好吧,不是全部,但至少这些格式:BMP,JPG,GIF和PNG.

在我提到的那些图像格式中,我的最高优先级是GIF图像,这意味着如果能够确定GIF图像是否为灰度的方法不能用于分析其他类型图像的方法,那么我将接受仅涵盖GIF图像像素处理的答案.


我认为我的需求很明确:如何确定图像是否为灰度?

如果它根本不清楚,为了避免我可以做到你可以浪费你的时间:

  • 该解决方案必须至少适用于GIF图像.(记住,我只关心GIF中的第一帧),但如果提供的解决方案对BMP,JPG和PNG也有效,那么它当然总是更好.

  • 该解决方案必须关注PixelFormat.Format32bppRgb灰度图像.

  • 解决方案一定不能使用Bitmap.GetPixel()功能,必须使用它Bitmap.LockBits().

  • 我不是要求解释,伪代码也没有关于图像结构/格式/像素等文档的外部链接,我要求一个有效的代码示例(当然,如果作者覆盖图像结构/像素技术,总是更好提供除代码之外的基本解释).

  • 在C#或VB.NET中,选择无关紧要.

研究


这就是我到目前为止所做的.我试图理解确定图像是否为灰度的点,我也不确定我的bytesPerPixel变量条件是否合适以及我的RGB值分配是否正确,因为我从一开始就说过我不是图像处理专家所以我可能错过了重要的事情......

VB.NET

Public Shared Function IsImageGrayScale(ByVal img As Image) As Boolean

    Select Case img.PixelFormat

        Case PixelFormat.Format16bppGrayScale
            Return True

        Case Else
            Dim pixelCount As Integer = (img.Width * img.Height)
            Dim bytesPerPixel As Integer = (Image.GetPixelFormatSize(img.PixelFormat) \ 8)

            If (bytesPerPixel <> 3) AndAlso (bytesPerPixel <> 4) Then
                Throw …
Run Code Online (Sandbox Code Playgroud)

.net c# vb.net image-processing grayscale

3
推荐指数
1
解决办法
1283
查看次数

向项目中的所有表单添加事件

如果我想FormForm标题中显示我项目中每个项目的大小,那么最佳方法是什么?
我不想在每个人手动放置一个事件处理程序Form.
我希望这个过程是自动的.
类似于重载Load()事件,在resize事件上添加处理程序.

vb.net events ui-automation winforms

3
推荐指数
1
解决办法
492
查看次数

如何检查系统音频是否静音?

我找到了这个答案,建议使用带有以下代码的“ core audio.dll” API

private function getmute() as boolean
    Dim devenum As New MMDeviceEnumerator
    Dim device As MMDevice = devenum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia)
    If device.AudioEndpointVolume.Mute = True Then
        Return True
    Else
        Return False
    End If
End Function
Run Code Online (Sandbox Code Playgroud)

我尝试了该代码,但无法正常工作,无法对其他问题发表评论。

当我尝试上述代码时,以下行将引发异常:

If device.AudioEndpointVolume.Mute = True Then
Run Code Online (Sandbox Code Playgroud)

这是异常消息:

AudioEndpointVolume不是设备的成员。

我已经输入了CoreAudioAPI,还有什么可能是错的?

我在寻找一个VB.NET或一个C#解决方案。

c# vb.net winapi

3
推荐指数
2
解决办法
444
查看次数

如何在VB.net中将多行从datagridview插入到SQL数据库?

我制作了一个名为 的表格form1.vb
我有 4 个名为supid, supname, supmobile,的文本框suploc
我有一个名为 的 DataGridView datagridview1
我正在 DataGridView 中传输这 4 个文本框数据,但是当我尝试在 SQL 数据库中发送 DataGridView 行时,它仅发送 1 行。

当我单击插入按钮时,我希望在 SQL Server 中立即插入多行。
关于C语言的教程有很多,但是没有关于VB.Net.
请帮助如何在VB.Net.

我的代码:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    If TextBox2.Text = "" Or TextBox3.Text = "" Or TextBox4.Text = "" Then
        MessageBox.Show("PLEASE FILL ALL FIELDS")
    Else
        connection.Open()
        Dim thequery As String = "select*from supplierdata where supmobile …
Run Code Online (Sandbox Code Playgroud)

vb.net sql-server datagridview

3
推荐指数
1
解决办法
4099
查看次数

检查数组中每个TextBox的标签

如何检查数组中所有TextBox控件的Tag属性?
我想要这样的东西:

If textBox.Tag And textbox2.Tag And textbox21.Tag And
   textbox22.Tag And textbox23.Tag And textbox24.Tag = "2" Then
Run Code Online (Sandbox Code Playgroud)

这是我的TextBoxes数组:

Dim allTextboxes() As TextBox = {textBox, narNaslov, narPersona, narDani, narPersona2,
                                 kupIme, kupAdresa, kupKontakt, uvBroj, uvDatum, uvIznos,
                                 uvAvans, uvRok, uvNacin, datumTbox} 
Run Code Online (Sandbox Code Playgroud)

vb.net winforms

3
推荐指数
2
解决办法
82
查看次数

在 Windows 窗体中列出(顶级)声明的变量

创建表单的实例后,我可以轻松列出表单中的所有控件。

是否有任何机制可以列出所有声明的变量或此类对象?
也许我应该称之为声明。仅顶层声明就足够了。

假设我们有带有MyForm这样顶级声明的 Form:

Dim Town as String
Dim ZIP as String
Dim StreetName as String
Dim StreetNo as String
Public dtCountries as DataTable
Public LstCities as List(Of String)
...
Run Code Online (Sandbox Code Playgroud)

伪代码示例:

Dim MyForm as New MyForm          ' create instance of the form
Dim dtVariables as New Datatable  ' create a datatable to store found objects
dtVariables.Columns.Add("ID", GetTy(Int32))
dtVariables.Columns.Add("VariableName", GetTy(String))
dtVariables.Columns.Add("VariableType", GetTy(String))

For Each Varbl In MyForm.***variables***   ' <<< (how) to read all variables …
Run Code Online (Sandbox Code Playgroud)

.net vb.net reflection system.reflection winforms

3
推荐指数
1
解决办法
304
查看次数

如何将多行文本添加到 ListBox 项?

我有一个小问题,找不到解决办法。
我想在一个ListBox项目的末尾放一段文字,但我不知道如何...

TagLib.File f = TagLib.File.Create(paths[i]);
listBox1.Items.Add("0" + i + ". " + f.Tag.Title +"\n" + string.Join(", ", f.Tag.Performers) + " - " + "\r" + f.Tag.Album + "                                               "  + f.Properties.Duration.TotalMinutes.ToString());
Run Code Online (Sandbox Code Playgroud)

我已经试过了,但不幸的是它不能那样工作。也许有人知道如何将文本放在最后,并带有代码?

我希望所有项目的文本匹配 我希望所有项目的文本相互匹配 而且我找不到解决方案如何将文本放在最后以及文本如何相互匹配 而且我找不到解决方案如何将文本放在最后以及文本如何相互匹配

.net c# graphics listbox winforms

3
推荐指数
1
解决办法
654
查看次数

如何在图像上绘制透明形状

如何在图像上绘制形状以覆盖那里的内容并使其透明?
就像下图中间的透明孔。

在此处输入图片说明

编辑:

我一般Graphics.FromImage(image)画图的时候用,即

Graphics.FromImage(image).DrawRectangle(...) 
Run Code Online (Sandbox Code Playgroud)

但我想在图像中间做一个透明的孔或矩形。

.net vb.net graphics gdi+ winforms

3
推荐指数
1
解决办法
208
查看次数

将窗口脱钩至其原始状态

我使用以下代码将窗口挂接到面板中:

SetParent(win, pnlApp.Handle);
SetWindowLong(win, GWL_STYLE, WS_VISIBLE);
MoveWindow(win, 0, 0, pnlApp.Width, pnlApp.Height, true);
Run Code Online (Sandbox Code Playgroud)

其中win是窗口句柄,为IntPtr. 这里考虑一下记事本,它可以很好地连接到面板中。
但是当我尝试使用以下代码释放(取消挂钩)它时:

SetParent(win, (IntPtr)0);
Run Code Online (Sandbox Code Playgroud)

显示时没有窗框!我的意思是它将再次释放到桌面中,但它没有任何窗口框架。

如何解决这个问题?

c# winapi winforms

3
推荐指数
1
解决办法
907
查看次数