WinForms: рддреНрд░реБрдЯрд┐рдпрд╛рдВ, рд╣реЛрдореНрд╕

рдЪрд┐рддреНрд░ 5

рд╣рдо Microsoft рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдмрдЧ рдвреВрдВрдврдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпреЛрдВ? рдпрд╣ рд╕рд░рд▓ рд╣реИ: рдЙрдирдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдЖрдорддреМрд░ рдкрд░ рдЬрд╛рдВрдЪрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрддреА рд╣реИрдВ (рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рддреБрд░рдВрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд▓рдЧ-рдЗрди рд╣реИ) рдФрд░ рдЙрдирдореЗрдВ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдХрд╛рдо рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдПрдордПрд╕ рд╕реЗ рдПрдХ рдЦреБрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдвреВрдВрдвреЗрдВ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ; рдЗрд╕реЗ рджреЗрдЦреЗрдВ; рджрд┐рд▓рдЪрд╕реНрдк рдЧрд▓рддрд┐рдпрд╛рдБ рдЪреБрдиреЗрдВ; рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдХрдо рд╣реИрдВ; рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрд▓ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦреЗрдВред рд╡рд╛рд╣! рд╡рд┐рди-рд╡рд┐рди-рд╡рд┐рди: рдЗрд╕рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓рдЧрд╛, рдмреНрд▓реЙрдЧ рдкрд░ рдирдИ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдиреБрдЕрд▓ рдХреЛ рдЦреБрд╢реА рд╣реИ, рдФрд░ рдХрд░реНрдо рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЧрдИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдо рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛рдпрд╛ рдЧрдпрд╛ рдФрд░ рдХреНрдпрд╛ рдЗрд╕ рдмрд╛рд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдкрд░рд┐рдЪрдп

рджрд┐рд╕рдВрдмрд░ 2018 рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, Microsoft рдиреЗ .NET рдХреЛрд░ 3 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 1 рдХреА рд░рд┐рд▓реАрдЬ рдХреА рдШреЛрд╖рдгрд╛ рдХреАред рдереЛрдбрд╝реА рджреЗрд░ рдкрд╣рд▓реЗ (рд▓рдЧрднрдЧ рдЕрдХреНрдЯреВрдмрд░ рдХреЗ рдордзреНрдп рд╕реЗ), GitHub рдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдореЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдкрд░ рд╕рдХреНрд░рд┐рдп рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд┐рдпрд╛ред .NET рдХреЛрд░ рдпреВрдЖрдИ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╡рд┐рдВрдбреЛрдЬ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдЖрдк рдпрд╣рд╛рдВ рдХрдорд┐рдЯрдореЗрдВрдЯ рдХреЗ рдЖрдВрдХрдбрд╝реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рдХреЛрдИ рднреА рд░рд┐рд╡реНрдпреВ рдХреЗ рд▓рд┐рдП WinForms рд╕реЛрд░реНрд╕ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдПред рдЬрд╛рдБрдЪ рдореЗрдВ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реБрдИред рдЖрд╡рд╢реНрдпрдХ: рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2019, .NET рдХреЛрд░ 3.0 рдПрд╕рдбреАрдХреЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛред рдФрд░ рдЕрдм рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рд▓реЙрдЧ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рд╣реИред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд▓реЙрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЖрд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдЗрд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ (рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕рдВрджреЗрд╢ рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╕реВрдЪреА рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ)ред рдпрд╣ рдЖрдкрдХреЛ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рддрд╛рд░рд╛рдВрдХрд┐рдд рдХреЗ рд╕рд╛рде рджрд┐рд▓рдЪрд╕реНрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА, рдкреВрд░реЗ рд▓реЙрдЧ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рд╡рд┐рд╡рд░рдг рдмрдирд╛рддрд╛ рд╣реВрдВред рдФрд░ рдЪреВрдВрдХрд┐ рдЖрдо рддреМрд░ рдкрд░ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдорд┐рд▓рд╛рддрд╛ рд╣реВрдВ, рд▓реЗрдЦ рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЬрдЧрд╣ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░, рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рд╣реЛ рдЧрдИрдВ (рдПрд╣, рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рд╛рдЬрд╝рд┐рд╢ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛), рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдХреНрд░рдо рдореЗрдВ рд▓рд╛рдКрдВрдЧрд╛ред

рдХреНрдпрд╛ рдкрд╛рдпрд╛ рдерд╛? рд╣рд╛рдИ рдФрд░ рдореАрдбрд┐рдпрдо рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ рд▓реЗрд╡рд▓ (реирек реп рдФрд░ рел respectivelyрек, рдХреНрд░рдорд╢рдГ) рдХреА рейрей рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ резрем csреж рд╕реАрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреЛрдб рдХреА релрекреж,режрежреж рд▓рд╛рдЗрдиреЛрдВ (рдЦрд╛рд▓реА рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рдХреА рдЧрдИ рдереАрдВред рдФрд░ рд╣рд╛рдВ, рдкрд░рдВрдкрд░рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА рдФрд░ рдХрдо рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рд╕реНрддрд░ (215 рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП) рдХреА рдЪреЗрддрд╛рд╡рдиреА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдордПрд╕ рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рднреА рдЪреЗрддрд╛рд╡рдиреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВред

рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП, рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓рдЧрднрдЧ 30% рдереАред рд▓рдЧрднрдЧ 20% рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдореИрдВ рдЕрднреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдЯреАрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд╣реАрдВ рджреЗ рд╕рдХрд╛ рдХрд┐ рдпрд╣ рдЧрд▓рддреА рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХреЛрдб рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред рдЦреИрд░, рдХрдо рд╕реЗ рдХрдо 20% рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рдЖрддреА рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдорд╛рдирд╡ рдХрд╛рд░рдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЬрд▓реНрджрдмрд╛рдЬреА, рдердХрд╛рди, рдЖрджрд┐ред рд╡рд┐рдкрд░реАрдд рдкреНрд░рднрд╛рд╡ рднреА рд╕рдВрднрд╡ рд╣реИ: рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЯреНрд░рд┐рдЧрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рдВрдЦреНрдпрд╛ 70-80 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИ, рдПрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрднреА-рдХрднреА рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝ рд╕рдХрддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирд╛ рдерд╛ред

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, 30% рдЪреЗрддрд╛рд╡рдиреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИ, рдЬреЛ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рддрд┐рд╢рдд рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рдореИрдВ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рд▓рдЧрднрдЧ 240 рдереА, рдЬреЛ рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд╣реИред рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрдордПрд╕ рд╕реЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдмрд╕реЗ рдЙрддреНрдХреГрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреЛрдб рдХреА рдкреНрд░рддрд┐ 1000 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ 0.44 рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрдВрдЧреА), рдФрд░ рд╢рд╛рдпрдж WinForms рдХреЛрдб рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред рдореИрдВ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХрд╛рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред

рддреНрд░реБрдЯрд┐рдпреЛрдВ

PVS-Studio: V3003 'if (A) {...} рдХрд╛ рдЙрдкрдпреЛрдЧ if (A) {...}' рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрди: 213, 224. ButtonStandardAdapter.cs 213

void PaintWorker(PaintEventArgs e, bool up, CheckState state) { up = up && state == CheckState.Unchecked; .... if (up & IsHighContrastHighlighted()) { .... } else if (up & IsHighContrastHighlighted()) { .... } else { .... } .... } 

рдЕрдЧрд░ рдФрд░ рдореЗрдВ рдЕрдЧрд░ рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЧрд▓рддреА рд╣реИ? рдпрджрд┐ рдЖрдк IsHighContrastHighlighted рд╡рд┐рдзрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ , рддреЛ рд╕рдВрджреЗрд╣ рд╣реИ:

 protected bool IsHighContrastHighlighted() { return SystemInformation.HighContrast && Application.RenderWithVisualStyles && (Control.Focused || Control.MouseIsOver || (Control.IsDefault && Control.Enabled)); } 

рд╡рд┐рдзрд┐ рд╢рд╛рдпрдж рд▓рдЧрд╛рддрд╛рд░ рдХреЙрд▓ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреА рд╣реИред рдФрд░ рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ, рдмреЗрд╢рдХ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ рдХрд┐ рд╡реЗ рдЗрд╕ рдХреЛрдб рдСрдл рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВред рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВред рдФрд░ рдлрд┐рд░ рднреА, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдЕрдкрд░рд┐рдЪрд┐рдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╕рдордп рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдирд╛ рдХрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

PVS-Studio: V3004 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди 'рдФрд░' рдХрдерди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред RichTextBox.cs 1018

 public int SelectionCharOffset { get { int selCharOffset = 0; .... NativeMethods.CHARFORMATA cf = GetCharFormat(true); // if the effects member contains valid info if ((cf.dwMask & RichTextBoxConstants.CFM_OFFSET) != 0) { selCharOffset = cf.yOffset; // <= } else { // The selection contains characters of different offsets, // so we just return the offset of the first character. selCharOffset = cf.yOffset; // <= } .... } .... } 

рдФрд░ рдпрд╣рд╛рдБ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рддреНрд░реБрдЯрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреА рдЧрдИ рд╣реИред рд╢рд░реНрдд рдХреЗ рдмрд╛рд╡рдЬреВрдж, selCharOffset рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рдореВрд▓реНрдп рдорд┐рд▓реЗрдЧрд╛ред

WinForms рдХреЛрдб рдореЗрдВ рджреЛ рдФрд░ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВ:
  • V3004 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди 'рдФрд░' рдХрдерди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рд╕реНрдкреНрд▓рд┐рдЯрдХреЛрдиреНрдЯрд░ред рдПрд╕рд╕реА 1700
  • V3004 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди 'рдФрд░' рдХрдерди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред ToolstripProfessionalRenderer.cs 371

PVS-Studio: V3008 рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: 681, 680. ProfessionalColorTable.cs 681

 internal void InitSystemColors(ref Dictionary<KnownColors, Color> rgbTable) { .... rgbTable[ProfessionalColorTable.KnownColors.msocbvcrCBBdrOuterDocked] = buttonFace; rgbTable[ProfessionalColorTable.KnownColors.msocbvcrCBBdrOuterDocked] = buttonShadow; .... } 

рд╡рд┐рдзрд┐ rgbTable рд╢рдмреНрджрдХреЛрд╢ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдХреЛрдб рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рди рд╕рдорд╛рди рдХреБрдВрдЬреА рдкрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдФрд░ рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдРрд╕реА 16 рдФрд░ рдЬрдЧрд╣реЗрдВ рдереАрдВред рдпрд╣ рдЕрдм рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреНрдпреЛрдВ, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд░рд╣рд╕реНрдп рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдореБрдЭреЗ рдСрдЯреЛрдЬреЗрдирд░реЗрдЯреЗрдб рдХреЛрдб рдХреЗ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рдорд┐рд▓реЗред рд╕рдВрдкрд╛рджрдХ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЪрд┐рддреНрд░ 3

рдореИрдВ рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рджрд╕ рдСрдкрд░реЗрд╢рди рджреЗрдЧрд╛:

  1. V3008 рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 785, 784ред ProfessionalColorTable.cs 785
  2. V3008 рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 787, 786ред ProfessionalColorTable.cs 787
  3. V3008 рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 789, 788
  4. V3008 рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреНрд╕: 791, 790. рдкреНрд░реЛрдлреЗрд╢рдирд▓рдХреЙрдиреНрдлрд╝рд░реНрдЯреЗрдмрд▓ .cs 791
  5. V3008 рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреНрд╕: 797, 796. рдкреНрд░реЛрдлреЗрд╢рдирд▓рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ .cs 797
  6. V3008 рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 799, 798. рдкреНрд░реЛрдлреЗрд╢рдирд▓рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ .cs 799
  7. V3008 рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреНрд╕: 807, 806. рдкреНрд░реЛрдлреЗрд╢рдирд▓ рдХреНрдпреЛрд░рдмрд▓ .cs 807
  8. V3008 рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 815, 814ред ProfessionalColorTable.cs 815
  9. V3008 рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 817, 816
  10. V3008 рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЬрд╛рдБрдЪ рд░реЗрдЦрд╛рдПрдБ: 823, 822. рдкреНрд░реЛрдлреЗрд╢рдирд▓рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ .cs 823

PVS-Studio: V3011 рджреЛ рд╡рд┐рдкрд░реАрдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рджреВрд╕рд░реА рд╕реНрдерд┐рддрд┐ рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реЛрддреА рд╣реИред рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: 5242, 5240ред DataGrid.cs 5242

 private void CheckHierarchyState() { if (checkHierarchy && listManager != null && myGridTable != null) { if (myGridTable == null) // <= { // there was nothing to check return; } for (int j = 0; j < myGridTable.GridColumnStyles.Count; j++) { DataGridColumnStyle gridColumn = myGridTable.GridColumnStyles[j]; } checkHierarchy = false; } } 

рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд╣рд╛рд▓рдд myGridTable! = рдмрд╛рд╣рд░реА рдореЗрдВ рдЕрд╢рдХреНрдд рдЕрдЧрд░ рдмреНрд▓реЙрдХ рдХреЛ рдмрд╛рдж рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЕрдм myGridTable == null рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рд╡реНрдпрд░реНрде рд╣реИред рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдЪреЗрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред

PVS-Studio: V3019 рд╕рдВрднрд╡рддрдГ рдПрдХ рдЧрд▓рдд рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рддреБрд▓рдирд╛ 'рдХреАрд╡рд░реНрдб' рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рдЗрдк рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рдж рдХреА рдЬрд╛рддреА рд╣реИред рдЪрд░ 'рд╡рд╛рдо', 'cscLeft' рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред TypeCodeDomSerializer.cs 611

PVS-Studio: V3019 рд╕рдВрднрд╡рддрдГ рдПрдХ рдЧрд▓рдд рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рддреБрд▓рдирд╛ 'рдХреАрд╡рд░реНрдб' рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рдЗрдк рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рдж рдХреА рдЬрд╛рддреА рд╣реИред рдЪрд░ 'рд╕рд╣реА', 'cscRight' рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред TypeCodeDomSerializer.cs 615

 public int Compare(object left, object right) { OrderedCodeStatementCollection cscLeft = left as OrderedCodeStatementCollection; OrderedCodeStatementCollection cscRight = right as OrderedCodeStatementCollection; if (left == null) { return 1; } else if (right == null) { return -1; } else if (right == left) { return 0; } return cscLeft.Order - cscRight.Order; // <= } 

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рддреБрд░рдВрдд рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рджреЛ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреАред рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рдпрд╣ рд╣реИ рдХрд┐ cscLeft рдФрд░ cscRight рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рдирддрд╛ рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рд╡реЗ рдЗрд╕ рдорд╛рди рдХреЛ рдСрд░реНрдбрд░ рдХрд┐рдП рдЧрдПCodeStatementCollection рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рдлрд▓ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рдЖрдЦрд┐рд░реА рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╕рдВрднрд╡ рд╣реИ рдЬрдм рд╕рднреА рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдкрд╛рд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдзрд┐ рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рдХрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, cscLeft / cscRight рдХреЛ рдмрд╛рдПрдВ / рджрд╛рдПрдВ рдХреЗ рдмрдЬрд╛рдп рд╣рд░ рдЬрдЧрд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ: рд╡реА 3020 рдПрдХ рд▓реВрдк рдХреЗ рднреАрддрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд 'рдмреНрд░реЗрдХ'ред SelectionService.cs 421

 void ISelectionService.SetSelectedComponents( ICollection components, SelectionTypes selectionType) { .... // Handle the click case object requestedPrimary = null; int primaryIndex; if (fPrimary && 1 == components.Count) { foreach (object o in components) { requestedPrimary = o; if (o == null) { throw new ArgumentNullException(nameof(components)); } break; } } .... } 

рдпрд╣ рдЯреБрдХрдбрд╝рд╛ "рдЧрдВрдз рдХреЗ рд╕рд╛рде" рдХреЛрдб рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ред рдпрд╣рд╛рдВ рдХреЛрдИ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдпрд╣ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдлреЛрд░рдЪреЗрдХ рдЪрдХреНрд░ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ - рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг, ICollection рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рд▓реВрдк рдореЗрдВ рдХреНрдпреЛрдВ, рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдПрдХрд▓ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ ( рдШрдЯрдХреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐) рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рдмреНрд░реЗрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА? рд╢рд╛рдпрдж, рдЬрд╡рд╛рдм рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: "рдпрд╣ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдЖ рд╣реИред" рдХреЛрдб рдмрджрд╕реВрд░рдд рд▓рдЧ рд░рд╣рд╛ рд╣реИред

PVS-Studio: V3022 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 'ocxState! = Null' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред AxHost.cs 2186

 public State OcxState { .... set { .... if (value == null) { return; } .... ocxState = value; if (ocxState != null) // <= { axState[manualUpdate] = ocxState._GetManualUpdate(); licenseKey = ocxState._GetLicenseKey(); } else { axState[manualUpdate] = false; licenseKey = null; } .... } } 

рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг, рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдПрдХ "рдореГрдд рдХреЛрдб" рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдиреНрдп рдмреНрд▓реЙрдХ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдХрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

PVS-Studio: V3027 рд╡реИрд░рд┐рдПрдмрд▓ 'e' рдХреЛ рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕реА рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдерд╛ред ImageEditor.cs 99

 public override object EditValue(....) { .... ImageEditor e = ....; Type myClass = GetType(); if (!myClass.Equals(e.GetType()) && e != null && myClass.IsInstanceOfType(e)) { .... } .... } 

рд╣рд╛рд▓рдд рдореЗрдВ рдЪрд░ рдИ рдкрд╣рд▓реЗ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЕрд╢рдХреНрдд рдЕрд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рд╣рд╛рдп, NullReferenceException ред

рдЗрд╕реА рддрд░рд╣ рдХреА рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐:

PVS-Studio: V3027 рдЪрд░ 'dropDownItem' рдХрд╛ рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕реА рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдерд╛ред ToolStripMenuItemDesigner.cs 1351

 internal void EnterInSituEdit(ToolStripItem toolItem) { .... ToolStripDropDownItem dropDownItem = toolItem as ToolStripDropDownItem; if (!(dropDownItem.Owner is ToolStripDropDownMenu) && dropDownItem != null && dropDownItem.Bounds.Width < commitedEditorNode.Bounds.Width) { .... } .... } 

рдкрд┐рдЫрд▓реЗ рдбреНрд░реЙрдк рдХреЗ рд╕рдорд╛рди рдПрдХ рд╕реНрдерд┐рддрд┐, рдХреЗрд╡рд▓ рдЪрд░ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЗ рд╕рд╛рде ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЕрд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВред рд╢рд╛рдпрдж рд╣рд╛рд▓рдд рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ ! (DropDownItem.Owner ToolStripDropDownMenu рд╣реИ) рдХреЛ рдмрд╛рдж рдореЗрдВ рдХреЛрдб рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред

PVS-Studio: V3030 рдЖрд╡рд░реНрддреА рдЬрд╛рдБрдЪред 'рдХреЙрд▓рдордХрд╛рдЙрдВрдЯ> 0' рдХреА рд╕реНрдерд┐рддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 3900 рд▓рд╛рдЗрди рдореЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХреА рдЧрдИ рдереАред рд╕реВрдЪреА рджреГрд╢реНрдпред 3903

 internal ColumnHeader InsertColumn( int index, ColumnHeader ch, bool refreshSubItems) { .... // Add the column to our internal array int columnCount = (columnHeaders == null ? 0 : columnHeaders.Length); if (columnCount > 0) { ColumnHeader[] newHeaders = new ColumnHeader[columnCount + 1]; if (columnCount > 0) { System.Array.Copy(columnHeaders, 0, newHeaders, 0, columnCount); } .... } .... } 

рдПрдХ рдЧрд▓рддреА рдЬреЛ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рд▓рдЧ рд╕рдХрддреА рд╣реИред рджрд░рдЕрд╕рд▓, рдареАрдХ рд╣реИ, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдХрд╛рдо рдХреЗ рддрд░реНрдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдФрд░ рдХрднреА-рдХрднреА рд╡реЗ рдРрд╕рд╛ рддрдм рднреА рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЛ рджреГрд╢реНрдп рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗред рдХреЗрд╡рд▓ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╕реНрддрдВрдн рдХреЛ рдбрдмрд▓-рдЪреЗрдХ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рд╣реА рд╕рдВрджрд┐рдЧреНрдз рд╣реИред рдпрд╛ рддреЛ рд╡реЗ рджреВрд╕рд░реЗ рдЪрд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдпрд╛ рдХрд┐рд╕реА рдПрдХ рдЬрд╛рдБрдЪ рдореЗрдВ рд╡реЗ рдЧрд▓рдд рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗред

PVS-Studio: V3061 рдкреИрд░рд╛рдореАрдЯрд░ 'lprcClipRect' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрд╢рд╛ рд╡рд┐рдзрд┐ рдирд┐рдХрд╛рдп рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред WebBrowserSiteBase.cs 281

 int UnsafeNativeMethods.IOleInPlaceSite.GetWindowContext( out UnsafeNativeMethods.IOleInPlaceFrame ppFrame, out UnsafeNativeMethods.IOleInPlaceUIWindow ppDoc, NativeMethods.COMRECT lprcPosRect, NativeMethods.COMRECT lprcClipRect, NativeMethods.tagOIFI lpFrameInfo) { ppDoc = null; ppFrame = Host.GetParentContainer(); lprcPosRect.left = Host.Bounds.X; lprcPosRect.top = Host.Bounds.Y; .... lprcClipRect = WebBrowserHelper.GetClipRect(); // <= if (lpFrameInfo != null) { lpFrameInfo.cb = Marshal.SizeOf<NativeMethods.tagOIFI>(); lpFrameInfo.fMDIApp = false; .... } return NativeMethods.S_OK; } 

рдЕрд╕рднреНрдп рдЧрд▓рддреАред рд╣рд╛рдВ, lprcClipRect рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдирдП рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдореЗрдВ, рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рд▓рд┐рдВрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЕрд▓рдЧ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдЕрдиреНрдп рдЪрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рджреЗрдЦреЗрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕рдХрд╛ рдирд╛рдо ("рдЧреЗрдЯ" рдЙрдкрд╕рд░реНрдЧ) рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рдЖрд░рдВрднреАрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣реИред рдкрд╣рд▓реЗ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ ( ppFrame рдФрд░ ppDoc ) рдЖрдЙрдЯ рдореЙрдбрд┐рдлрд╛рдпрд░ рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирдП рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд▓рд┐рдВрдХ lprcPosRect рдФрд░ lpFrameInfo рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдХреЗрд╡рд▓ lprcClipRect рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪреА рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯ рдпрд╛ рд░реЗрдл рд╕рдВрд╢реЛрдзрдХ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

PVS-Studio: V3066 рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рдд рдЖрджреЗрд╢реЛрдВ рдХрд╛ рддрд░реНрдХ 'AdjustCellBorderStyle' рдкрджреНрдзрддрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рд╣реБрдЖ:'FirstDisplayedRow 'рдФрд░'FirstDisplayedColumn'ред DataGridViewComboBoxCell.cs 1934

 protected override void OnMouseMove(DataGridViewCellMouseEventArgs e) { .... dgvabsEffective = AdjustCellBorderStyle( DataGridView.AdvancedCellBorderStyle, dgvabsPlaceholder, singleVerticalBorderAdded, singleHorizontalBorderAdded, isFirstDisplayedRow, // <= isFirstDisplayedColumn); // <= .... } 

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐ рдЕрдВрддрд┐рдо рджреЛ рддрд░реНрдХ рдорд┐рд╢реНрд░рд┐рдд рдереЗред рдЪрд▓рд┐рдП рдПрдбрдЬрд╕реНрдЯрдореЗрдВрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╡рд┐рдзрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ :

 public virtual DataGridViewAdvancedBorderStyle AdjustCellBorderStyle( DataGridViewAdvancedBorderStyledataGridViewAdvancedBorderStyleInput, DataGridViewAdvancedBorderStyle dataGridViewAdvancedBorderStylePlaceholder, bool singleVerticalBorderAdded, bool singleHorizontalBorderAdded, bool isFirstDisplayedColumn, bool isFirstDisplayedRow) { .... } 

рдЧрд▓рддреА рд▓рдЧрддреА рд╣реИред рд╣рд╛рдВ, рдЕрдХреНрд╕рд░ рдХреБрдЫ рддрд░реНрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдЪрд░ рд╕реНрд╡реИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реИред рдХреЙрд▓рд┐рдВрдЧ рдпрд╛ рдХреЙрд▓рд┐рдВрдЧ рдореЗрдердбреНрд╕ рдореЗрдВ рдХреБрдЫ рднреА рдРрд╕рд╛ рдЙрдкрдпреЛрдЧ рдкреИрдЯрд░реНрди рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмреВрд▓ рдкреНрд░рдХрд╛рд░ рдЪрд░ рднреНрд░рдорд┐рдд рд╣реИрдВред рджреВрд╕рд░реЗ, рддрд░реАрдХреЛрдВ рдХреЗ рдирд╛рдо рднреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ: рдХреЛрдИ "рд╕реНрд╡реИрдк" рдпрд╛ "рд░рд┐рд╡рд░реНрд╕" рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрд╕ рддрд░рд╣ рдХреА рдЧрд▓рддреА рдХрд░рдирд╛ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рдкрдВрдХреНрддрд┐ / рд╕реНрддрдВрдн рдЬреЛрдбрд╝реА рдХреЗ рдХреНрд░рдо рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВред рдореЗрд░реЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╕ "рдкрдВрдХреНрддрд┐ / рд╕реНрддрдВрдн" рдкрд░рд┐рдЪрд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдПрдбрдЬрд╕реНрдЯрдореЗрдВрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╡рд┐рдзрд┐ рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдЖрджреЗрд╢ "рдХреЙрд▓рдо / рдкрдВрдХреНрддрд┐" рд╣реИред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ: 'LOCALE_USER_DEFAULT' рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╕рдордп V3070 Uninitialized рдЪрд░ 'LANG_USER_DEFAULT' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред NativeMethods.cs 890

 internal static class NativeMethods { .... public static readonly int LOCALE_USER_DEFAULT = MAKELCID(LANG_USER_DEFAULT); public static readonly int LANG_USER_DEFAULT = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT); .... } 

рдПрдХ рджреБрд░реНрд▓рдн рдЧрд▓рддреАред рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдЖрд░рдВрдн рдХреЗ рдХреНрд░рдо рдХреЛ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред LOCALE_USER_DEFAULT рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, LANG_USER_DEFAULT рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдЕрднреА рддрдХ рдЖрд░рдВрднреАрдХреГрдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдорд╛рди 0. рд╣реИред рд╡реИрд╕реЗ, LANG_USER_DEFAULT рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рдирд╣реАрдВ рдерд╛ рдФрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдХрдВрд╕реЛрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрд╛ рдерд╛ рдЬреЛ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИред WinForms рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВрдиреЗ рдЙрдирдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

 internal static class NativeMethods { public static readonly int LOCALE_USER_DEFAULT = MAKELCID(LANG_USER_DEFAULT); public static readonly int LANG_USER_DEFAULT = MAKELANGID(0x00, 0x01); public static int MAKELANGID(int primary, int sub) { return ((((ushort)(sub)) << 10) | (ushort)(primary)); } public static int MAKELCID(int lgid) { return MAKELCID(lgid, 0x0); } public static int MAKELCID(int lgid, int sort) { return ((0xFFFF & lgid) | (((0x000f) & sort) << 16)); } } class Program { static void Main() { System.Console.WriteLine(NativeMethods.LOCALE_USER_DEFAULT); } } 

рд▓реЙрдиреНрдЪ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: 0. рдЕрдм рд╣рдо LOCALE_USER_DEFAULT рдФрд░ LANG_USER_DEFAULT рдлрд╝реАрд▓реНрдб рдХреА рдШреЛрд╖рдгрд╛ рдХреЛ рд╕реНрд╡реИрдк рдХрд░рддреЗ рд╣реИрдВ ред рдЗрд╕ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо: 1024ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ: рд╡реА 3080 рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрддрддрд╛ ред 'рд╕реЗрд╕' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдХреЛрдбрдбреЛрдорд╕реЗрд░рд┐рд▓рд╛рдЗрдЬрд╝рд░рдмреЗрд╕ .cs 562

 protected void DeserializeStatement( IDesignerSerializationManager manager, CodeStatement statement) { .... CodeExpressionStatement ces = statement as CodeExpressionStatement; if (ces != null) { .... } else { .... DeserializeExpression(manager, null, ces.Expression); // <= .... } .... } 

рдХреЛрдб рд╣реИ рдХрд┐ "рдЧрд┐рд░" рдЪрд╛рд╣рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд┐рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рджреВрд╕рд░реА рд╢рд╛рдЦрд╛ рдореЗрдВ рдмрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм ces рд╕рдВрджрд░реНрдн рд╢реВрдиреНрдп рд╣реИ ред

рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ: рд╡реА 3080 рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрддрддрд╛ ред 'рдХреЙрдореНрдмреЛ рдмреЙрдХреНрд╕' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред ComboBox.cs 6610

 public void ValidateOwnerDrawRegions(ComboBox comboBox, ....) { .... if (comboBox != null) { return; } Rectangle topOwnerDrawArea = new Rectangle(0, 0, comboBox.Width, innerBorder.Top); .... } 

рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА рдХреЛрдбред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдЧрд░ (рдХреЙрдореНрдмреЛрдмреЙрдХреНрд╕ == рдЕрд╢рдХреНрдд) рдХреЗ рдмрдЬрд╛рдп (comboBox! = Null) рд▓рд┐рдЦрдХрд░ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдорд┐рд▓рд╛рдпрд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП - рд╣рдо рдЕрдЧрд▓реЗ NullReferenceException рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

рд╣рдордиреЗ рджреЛ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ V3080 рдХреА рдЬрд╛рдВрдЪ рдХреА, рдЬрд╣рд╛рдВ рдЖрдк рд╡рд┐рдзрд┐ рдХреЗ рднреАрддрд░ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди V3080 рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмреБрджреНрдзрд┐рдорд╛рди рд╣реИрдВ рдФрд░ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрддрдиреА рджреЗрд░ рдкрд╣рд▓реЗ рдирд╣реАрдВ, рд╣рдордиреЗ рдбреЗрдЯрд╛рдлреНрд▓реЛ рдФрд░ рдЗрдВрдЯрд░рдкреНрд░реЛрдбреЗрдХреНрдЯреЛрд░рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рддрдВрддреНрд░ рдХреЛ рдХрд╛рдлреА рдордЬрдмреВрдд рдХрд┐рдпрд╛ред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ " Nullable Reference Types in C # 8.0 рдФрд░ Static Analysis " рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдБ WinForms рдореЗрдВ рдПрдХ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рдкрд╛рдИ рдЧрдИ рд╣реИ:

PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ: V3080 'n.TT' рдкрд░ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рд╕рдВрднрд╡ рдЕрд╢рд╛рдВрддрд┐ рдХреЛ рд░реЛрдХрдиреЗред 1 рддрд░реНрдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: contentReaderред ResXResourceReader.cs 267

 private void EnsureResData() { .... XmlTextReader contentReader = null; try { if (fileContents != null) { contentReader = new XmlTextReader(....); } else if (reader != null) { contentReader = new XmlTextReader(....); } else if (fileName != null || stream != null) { .... contentReader = new XmlTextReader(....); } SetupNameTable(contentReader); // <= .... } finally { .... } .... } 

рд╡рд┐рдзрд┐ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдЪрд░ contentReader рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рджреЗрдЦреЗрдВ ред рдЪреЗрдХ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд╛рдж, рд▓рд┐рдВрдХ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреЗрдХ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдПрдХ рдФрд░ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ (рдпрд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг), рд▓рд┐рдВрдХ рдЕрднреА рднреА рд╢реВрдиреНрдп рд░рд╣ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ SetupNameTable рдкрджреНрдзрддрд┐ рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рддреНрдпрд╛рдкрди рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 private void SetupNameTable(XmlReader reader) { reader.NameTable.Add(ResXResourceWriter.TypeStr); reader.NameTable.Add(ResXResourceWriter.NameStr); .... } 

рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рд╣реИред

рдФрд░ рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐, рдЬрд╣рд╛рдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдкрдбрд╝рд╛:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ: рд╡реА 3080 рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрддрддрд╛ ред рдирд┐рд░реАрдХреНрд╖рдг 'рд▓реЗрдЖрдЙрдЯ' рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред DockAndAnchorLayout.cs 156

 private static Rectangle GetAnchorDestination( IArrangedElement element, Rectangle displayRect, bool measureOnly) { .... AnchorInfo layout = GetAnchorInfo(element); int left = layout.Left + displayRect.X; .... } 

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ GetAnchorInfo рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬреЛ рдмрд╛рдПрдВ рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛ред рдЪрд▓реЛ рдХреЙрд▓ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реИ:

 private static AnchorInfo GetAnchorInfo(IArrangedElement element) { return (AnchorInfo)element.Properties.GetObject(s_layoutInfoProperty); } public object GetObject(int key) => GetObject(key, out _); public object GetObject(int key, out bool found) { short keyIndex = SplitKey(key, out short element); if (!LocateObjectEntry(keyIndex, out int index)) { found = false; return null; } // We have found the relevant entry. See if // the bitmask indicates the value is used. if (((1 << element) & s_objEntries[index].Mask) == 0) { found = false; return null; } found = true; switch (element) { case 0: return s_objEntries[index].Value1; .... default: Debug.Fail("Invalid element obtained from LocateObjectEntry"); return null; } } 

рджрд░рдЕрд╕рд▓, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХреЙрд▓ рд╢реНрд░рдВрдЦрд▓рд╛ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ GetObject рддрд░реАрдХрд╛ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдЪреЗрдХ рдХреЗ рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдкрд╛рд╕ рдХрд░ рджреЗрдЧрд╛ред рд╢рд╛рдпрдж, GetAnchorDestination рд╡рд┐рдзрд┐ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

WinForms рдХреЛрдб рдореЗрдВ 70 рд╕реЗ рдЕрдзрд┐рдХ рдРрд╕реА рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВред рд╡реЗ рд╕рднреА рд╕рдорд╛рди рд╣реИрдВ рдФрд░ рдореИрдВ рд▓реЗрдЦ рдореЗрдВ рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рджреВрдВрдЧрд╛ред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ: V3091 рдЕрдиреБрднрд╡рдЬрдиреНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдгред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рдЕрдВрджрд░ рдореМрдЬреВрдж рд╣реИ: "ShowCheckMargin"ред 'ShowCheckMargin' рд╢рдмреНрдж рд╕рдВрджрд┐рдЧреНрдз рд╣реИред рд╕рдВрдкрддреНрддрд┐ рдирд╛рдоред 136

 internal class PropertyNames { .... public static readonly string ShowImageMargin = "ShowCheckMargin"; ... public static readonly string ShowCheckMargin = "ShowCheckMargin"; .... } 

рддреНрд░реБрдЯрд┐ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╕рдордп, рд╡реЗ рдЙрд╕реА рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдХреЛрдб рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рд╕реЛрдЪрд╛ (рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЛ рджреЛрд╖ рджреЗрдирд╛ рд╣реИ)ред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдЪрд░ рдХреЗ рдирд╛рдореЛрдВ рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрд╛рд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐ рд▓рд╛рдЗрдиреЗрдВ рджреАрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦреЛ рдХрд┐ рдпрд╣ рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЪрд┐рддреНрд░ 2

рдпрд╣ рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдЬреЛ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╢рдХреНрддрд┐ рдФрд░ рдЕрд╕реАрдо рджреЗрдЦрднрд╛рд▓ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

PVS-Studio: V3095 рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ ' currentForm ' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 3386, 3404. Application.cs 3386

 private void RunMessageLoopInner(int reason, ApplicationContext context) { .... hwndOwner = new HandleRef( null, UnsafeNativeMethods.GetWindowLong( new HandleRef(currentForm, currentForm.Handle), // <= NativeMethods.GWL_HWNDPARENT)); .... if (currentForm != null && ....) .... } 

рдХреНрд▓рд╛рд╕рд┐рдХред CurrentForm рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЬрд╛рдБрдЪ рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЧреЗ рдХреЛрдб рдореЗрдВ рдЕрд╢рдХреНрдд рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЕрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ, рд╕рд╛рде рд╣реА рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ :) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдЗрд╕реА рддрд░рд╣ рдХреА рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ: V3095 'рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдбрдмреНрд░рд╢' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЗрд╕реЗ рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд░реЗрдЦрд╛рдПрдБ: 2331, 2334ред DataGrid.cs 2331

 public Color BackgroundColor { .... set { .... if (!value.Equals(backgroundBrush.Color)) // <= { if (backgroundBrush != null && BackgroundBrush != DefaultBackgroundBrush) .... } } } 

WinForms рдХреЛрдб рдореЗрдВ, рдореБрдЭреЗ 60 рд╕реЗ рдЕрдзрд┐рдХ рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╡реЗ рд╕рднреА рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдзреНрдпрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЗрддрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЦреБрдж рдХреЛ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рджреЛ рддрдХ рд╣реА рд╕реАрдорд┐рдд рд░рдЦреВрдВрдЧрд╛ред

PVS-Studio: V3125 '_propInfo' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдирд┐рд╖реНрдкрд╛рджрди рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 996, 982. рдмрд╛рдЗрдВрдбрд┐рдВрдЧ.рдХреЗ 996

 private void SetPropValue(object value) { .... if (....) { if .... else if (_propInfo != null) .... } else { _propInfo.SetValue(_control, value); } .... } 

рддрд╕реНрд╡реАрд░ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреНрд▓рд╛рд╕рд┐рдХ, рдмрдЧ V3125 ред рдЙрд▓рдЯреА рд╕реНрдерд┐рддрд┐ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд╢рдХреНрдд рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рд╡реЗ рдХреЛрдб рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐:

PVS-Studio: V3125 'рдорд╛рд▓рд┐рдХ' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд░реЗрдЦрд╛рдПрдБ рдЬрд╛рдВрдЪреЗрдВ: 64, 60. рдлреНрд▓реИрдЯрдмрдЯрди рдПрдкрд┐рдпрд░реЗрдВрд╕ .cs 64

 public int BorderSize { .... set { .... if (owner != null && owner.ParentInternal != null) { LayoutTransaction.DoLayoutIf(....); } owner.Invalidate(); // <= .... } } 

рд╕реМрдВрджрд░реНрдпред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╛рд╣рд░реА рд╢реЛрдзрдХрд░реНрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╣реИред рджрд░рдЕрд╕рд▓, рдЗрди рджреЛрдиреЛрдВ V3125s рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ WinForms рдХреЛрдб рдореЗрдВ 50 рд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд╛рди рдкреИрдЯрд░реНрди рдорд┐рд▓реЗред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

рдФрд░ рдЕрдВрдд рдореЗрдВ - рдмрд▓реНрдХрд┐ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддреНрд░реБрдЯрд┐, рдореЗрд░реА рд░рд╛рдп рдореЗрдВред

PVS-Studio: V3137 'hCurrentFont' рд╡реИрд░рд┐рдПрдмрд▓ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рддрдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред DeviceContext2.cs 241

 sealed partial class DeviceContext : .... { WindowsFont selectedFont; .... internal void DisposeFont(bool disposing) { if (disposing) { DeviceContexts.RemoveDeviceContext(this); } if (selectedFont != null && selectedFont.Hfont != IntPtr.Zero) { IntPtr hCurrentFont = IntUnsafeNativeMethods.GetCurrentObject( new HandleRef(this, hDC), IntNativeMethods.OBJ_FONT); if (hCurrentFont == selectedFont.Hfont) { // select initial font back in IntUnsafeNativeMethods.SelectObject(new HandleRef(this, Hdc), new HandleRef(null, hInitialFont)); hCurrentFont = hInitialFont; // <= } selectedFont.Dispose(disposing); selectedFont = null; } } .... } 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдХреНрдпрд╛ рдЪреЗрддрд╛рд╡рдиреА рджреА, рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЛ рдХреНрдпреЛрдВ рдХрд┐ рдПрдХ рдЪрд░ рдХреЛ рдПрдХ рдорд╛рди рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдЧреЗ рдХреА рд╡рд┐рдзрд┐ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИред

DeviceContext2.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред DisposeFont рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдВрджрд░реНрдн рдФрд░ рдлрд╝реЙрдиреНрдЯред рдПрдХ рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рдВрдкреВрд░реНрдг рдбрд┐рд╕реНрдкреЛрдЬрд╝реЛрдВрдЯ рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХреА рд╣реИред рд╕реНрдерд╛рдиреАрдп рдЪрд░ hCurrentFont рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрд░ рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЙрд╕реА рдирд╛рдо рдХреЗ рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ DeviceContext рдХреНрд▓рд╛рд╕ рдХреЗ рджреЛ рддрд░реАрдХреЗ рдорд┐рд▓реЗ рдЬрд╣рд╛рдБ hCurrentFont рдирд╛рдордХ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ :

 public IntPtr SelectFont(WindowsFont font) { .... hCurrentFont = font.Hfont; .... } public void ResetFont() { .... hCurrentFont = hInitialFont; } 

ResetFont рд╡рд┐рдзрд┐ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рд╡рд╣рд╛рдБ рд╣реИ рдЬреЛ рдбрд┐рд╕реНрдкреЛрдЬрд╝рдиреНрдЯ рд╡рд┐рдзрд┐ рдиреЗрд╕реНрдЯреЗрдб рдореЗрдВ рдХрд░рддреА рд╣реИ рдпрджрд┐ рдмреНрд▓реЙрдХ (рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ)ред рдФрд░ рдЙрд╕реА рдирд╛рдо рдХрд╛ рдпрд╣ hCurrentFont рдлрд╝реАрд▓реНрдб DeviceContext.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рдЧ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

 sealed partial class DeviceContext : .... { .... IntPtr hInitialFont; .... IntPtr hCurrentFont; // <= .... } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЧрд▓рддреА рдХреА рдЧрдИ рд╣реИред рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рдЗрд╕рдХреА рдЖрд▓реЛрдЪрдирд╛рддреНрдордХрддрд╛ рдХрд╛ рд╣реИред рдЕрдм, рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ DisposeFont рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, "рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдлрд╝реЙрдиреНрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ", hCurrentFont рдлрд╝реАрд▓реНрдб рдХреЛ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдХреЛрдб рд▓реЗрдЦрдХ рд╣реА рд╕рдЯреАрдХ рдирд┐рд░реНрдгрдп рджреЗ рд╕рдХрддреЗ рд╣реИрдВред

рдирд┐рд╖реНрдХрд░реНрд╖

рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдмрд╛рд░ рдореБрдЭреЗ рдПрдордПрд╕ рдХреЛ рдереЛрдбрд╝рд╛ рдбрд╛рдВрдЯрдирд╛ рд╣реЛрдЧрд╛ред WinForms рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдХреБрдЫ рднреАрдбрд╝ рдХреЗ рдХрд╛рд░рдг рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде MS .NET рдХреЛрд░ 3 рдФрд░ рдШрдЯрдХреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ WinForms рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, WinForms рдХреЛрдб рдЕрднреА рднреА "рдирдо" рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕реНрдерд┐рддрд┐ рдЬрд▓реНрдж рд╣реА рдмреЗрд╣рддрд░ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рдЬрд╛рдПрдЧреАред

рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рджреВрд╕рд░рд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЙрдирдХреА рддрд▓рд╛рд╢ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд▓рдЧрд╛ :)ред

рд╡реИрд╕реЗ, рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рд╕рд░реНрдЧреЗрдИ рд╡рд╛рд╕рд┐рд▓рд┐рд╡ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд▓реЗрдЦ рдЬрд▓реНрдж рд╣реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рдЦреЛрдЬрддрд╛ рд╣реИ рдФрд░ .NET рдХреЛрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдХреЛрдб рдореЗрдВ рдХрд╛рдлреА рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рдХрд╛рдо .NET рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рднреА рдпреЛрдЧрджрд╛рди рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

рдЦреИрд░, рдЬреЛ рд▓реЛрдЧ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдЕрдкрдиреЗ рджрдо рдкрд░ рд╕реБрдзрд╛рд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╕рдВрдзрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореИрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред

рд╕рднреА рд╕рд╛рдл рдХреЛрдб!


рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рд╕рд░реНрдЧреЗрдИ рдЦреНрд░реЗрдиреЛрд╡ред WinForms: рддреНрд░реБрдЯрд┐рдпрд╛рдВ, рд╣реЛрдореНрд╕

Source: https://habr.com/ru/post/hi462807/


All Articles